Через 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"); });
Вот пример работы:
Теперь вы знаете, как создавать кастомные команды и можете с помощью них провести первичную инициализацию приложения или выполнить ресурсоёмкую задачу через консоль.
Автор: Stephen Jude
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.