Мне было интересно, какая разница между различными командоподобными классами в Laravel 5.1. Насколько я могу судить, Laravel 5.1 имеет следующие возможности:
- Команды консоли (
artisan make:console
) - Команды (
artisan make:command
)- Обработчики (
artisan make::command --handler
)
- Обработчики (
- Работа (
artisan make:job
)
Я пришел прямо с 4.2 до 5.1, поэтому я не знаю, что произошло между 4.2 и 5.1, но мне сказали, что средний (просто команды) в основном не предполагается использовать больше - они начиная с того момента, когда задания в очереди становятся "командами" в 5.0, но Laravel с тех пор решил против этого, и они просто готовы к совместимости. Тем не менее, я не на 100% по этому вопросу, поэтому разъяснение будет оценено.
Мой конкретный вариант использования - это то, что я хочу место, чтобы поставить автономную задачу "runnable". Например, что-то, что будет удалять файлы старше 5 дней из заданного каталога (но это может сделать что угодно).
Сначала это звучит как консольная команда - я хочу, чтобы она могла запускать ее из artisan
для начала. Но я могу также хотеть его по расписанию (отлично, artisan schedule:run
запускает консольные команды). Но я также могу выполнить его асинхронно из кода. Консольные команды можно запускать синхронно с Artisan::call()
, но для асинхронных это (я думаю), в которые входят очереди, и это внезапно должно быть заданием.
Итак, у нас есть работа. Теперь мы можем добавить его в очередь из кода, но как мы его выполняем как команду ремесленника (синхронно)? Могу ли я просто создать тонкую консольную команду и добавить в нее тэг DispatchesJobs
(или код в нем), а затем отправить задание? Должно ли задание всегда идти в очереди или мы можем выполнить задание синхронно (и, в идеале, выводить на вывод команды консоли?) Тот же вопрос касается запуска его по расписанию - я должен создать эту консоль и добавьте это в планировщик, или я могу заставить планировщик выполнить задание напрямую?
И, наконец, у нас есть "команды", которые не являются командами консоли и не являются заданиями. Как я уже говорил, люди говорят мне, что это всего лишь зависания от изменения кода Laravel 5.0, которое было (kinda) отменено. Но команда artisan make
по-прежнему существует для них, поэтому они не могут быть мертвыми. Кроме того, что связано с командой самообучения (по умолчанию используется метод handle
) и тот, который "требует" класса обработчика (run artisan make:command --handler
)? Как вы на самом деле их выполняете? Вручную с помощью (new App\Command\SomeCommand)->handle();
или (new App\handlers\SomeCommandHandler)->handle(new App\Command\SomeCommand)
, или есть какая-то скрытая система, о которой я не знаю (может быть, они могут быть отправлены с помощью диспетчера задания/очереди)? Также вы можете создавать команды "queued" artisan make::command --queued
, так как они тоже отличаются?
Я думаю, мой вопрос сводится к следующему:
- Что такое реальная (семантическая и функциональная) разница между ними?
- Каков правильный способ их запуска?
- Что лучше для моих целей в целом-отдельном бите кода, который нужно запускать, каким бы способом я ни считал нужным?
Я нашел информацию в документации о том, как использовать очереди и создавать консольные команды, но ничего конкретно о том, когда их использовать или что-либо в командных классах и обработчиках.
Связанный, но не совсем то же (также, он не отвечает): Команды и задания Laravel 5.1