Интерфейс командной строки Artisan

Введение

Artisan - название интерфейса командной строки, входящей в состав Laravel. Он предоставляет полезные команды для использования во время разработки вашего приложения. Работает на основе мощного компонента Symfony Console.

Использование

Вывод всех доступных команд

Чтобы вывести все доступные команды Artisan, используйте команду list:

php artisan list

Просмотр помощи для команды

Каждая команда также включает и инструкцию, которая отображает и описывает доступные аргументы и опции для команды. Для того, чтобы её вывести, просто добавьте слово help перед командой:

php artisan help migrate

Запуск в заданной среде выполнения

Вы также можете указать среду выполнения, в которой будет выполнена команда, при помощи опции --env:

php artisan migrate --env=local

Отображение используемой версии Laravel

Вы также можете увидеть версию Laravel вашего приложения используя опцию --version:

php artisan --version

Вызов команд из приложения

Иногда может потребоваться выполнить команду Artisan из вашего приложения, например, в обработчике роута или в контроллере. Для этого используется фасад Artisan:

Route::get('/foo', function()
{
    $exitCode = Artisan::call('command:name', ['--option' => 'foo']);

    //
});

Вы даже можете добавить команду в очередь для того, чтобы она выполнялась на фоне менеджером очереди:

Route::get('/foo', function()
{
    Artisan::queue('command:name', ['--option' => 'foo']);

    //
});

Планировщик заданий

Раньше разработчикам приходилось добавлять задание в Cron для каждой консольной команды и это была большая головная боль. Давайте сделаем нашу жизнь проще. Планировщик заданий Laravel позволяет просто и гибко составлять расписание запуска ваших команд из самого приложения и для этого потребуется добавить всего одно Cron задание.

Ваш планировщик находится в файле app/Console/Kernel.php. В классе Kernel вы увидите метод schedule, который уже содержит в себе простой пример. Вы можете добавить сколько угодно заданий, используя объект Schedule. Единственное Cron задание, которое нужно добавить на сервер:

* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1

Это Cron задание вызывает планировщик заданий каждую минуту. Затем, Laravel просматривает задания и запускает необходимые. Проще некуда!

Несколько примеров

Давайте рассмотрим несколько примеров использования планировщика:

Замыкание в качестве задания

$schedule->call(function()
{
    // Do some task...

})->hourly();

Консольная команда в качестве задания

$schedule->exec('composer self-update')->daily();

Добавление задания, используя синтаксис Cron

$schedule->command('foo')->cron('* * * * *');

Постоянные задания

$schedule->command('foo')->everyFiveMinutes();

$schedule->command('foo')->everyTenMinutes();

$schedule->command('foo')->everyThirtyMinutes();

Ежедневные задания

$schedule->command('foo')->daily();

Ежедневные задания с запуском в определённое время (24-часовой формат времени)

$schedule->command('foo')->dailyAt('15:00');

Задания, выполняемые дважды в день

$schedule->command('foo')->twiceDaily();

Задания на каждый день, кроме выходных

$schedule->command('foo')->weekdays();

Еженедельные задания

$schedule->command('foo')->weekly();

// Можно указать время выполнения для каждого дня (0-6)...
$schedule->command('foo')->weeklyOn(1, '8:00');

Ежемесячные задания

$schedule->command('foo')->monthly();

Запуск по дням недели

$schedule->command('foo')->mondays();
$schedule->command('foo')->tuesdays();
$schedule->command('foo')->wednesdays();
$schedule->command('foo')->thursdays();
$schedule->command('foo')->fridays();
$schedule->command('foo')->saturdays();
$schedule->command('foo')->sundays();    

Выполнение задания только в определённой среде выполнения

$schedule->command('foo')->monthly()->environments('production');

Выполнение задания, даже если приложение находится в режиме обслуживания

$schedule->command('foo')->monthly()->evenInMaintenanceMode();

Выполнять, но только если функция-параметр вернула true

$schedule->command('foo')->monthly()->when(function()
{
    return true;
});

Отправить вывод на email

$schedule->command('foo')->emailOutputTo('foo@example.com');

Записать вывод в файл

$schedule->command('foo')->sendOutputTo($filePath);

Дернуть url по завершении задачи

$schedule->command('foo')->thenPing($url);