Создаём свою artisan-команду в Laravel и подсчитываем время её выполнения

Через CLI (Интерфейс командной строки) очень удобно выполнять длительные и ресурсоёмкие задачи, а с помощью Artisan Console мы можем создавать для этого свои собственные команды. Обычно я делаю специальные команды для приложений, требующих первоначальную настройку, либо для запуска запросов к очень большим базам данных.

В этом уроке я покажу вам, как создать свою artisan-команду и рассчитать время выполнения этой команды.

Существует два способа создания: на основе Класса и на основе Замыкания.

Команда-Класс создается через artisan-команду make:command. Она генерирует Класс в папку app/Console/Commands и далее вы настраиваете его под свои нужды.

Команда-Замыкание создается внутри файла routes/console.php вашего приложении Laravel.

В этом уроке мы рассмотрим Команду-Замыкание.

Создание Кастомной Команды

Сделаем команду для рассылки электронных писем. Добавьте в файл routes/console.php следующее:

use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Artisan;

Artisan::command('send:emails', function(){
    $this->comment('Processing');
    app(UserController::class)->sendEmails();
    $this->comment('Processed');
});

Теперь мы можем запустить нашу новую команду:

php artisan send:emails

Расчёт времени выполнения

Чтобы узнать за сколько времени отработала наша команда мы можем использовать хелпер-метод now(). Он возвращает экземпляр Carbon и теперь мы можем использовать методы diffInSeconds() или diffInMinutes(), в зависимости от того, что хотим получить.

Сперва мы определим время начала, а затем вычислим разницу между ним и временем окончания выполнения команды.

use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Artisan;

Artisan::command('send:emails', function(){
    $start = now();
    $this->comment('Processing');
    app(UserController::class)->sendEmails();
    $time = $start->diffInSeconds(now());
    $this->comment("Processed in $time seconds");
});

Вот пример работы:

Пример работы кастомной artisan-команды

Теперь вы знаете, как создавать кастомные команды и можете с помощью них провести первичную инициализацию приложения или выполнить ресурсоёмкую задачу через консоль.

Автор: Stephen Jude
Перевод: Алексей Широков

Наш Телеграм-канал — следите за новостями о Laravel.