Из-за природы метода terminate
вы не можете использовать его в командах ремесленника, начиная с laravel docs :
Если вы определяете метод завершения в вашемпромежуточное ПО, оно будет автоматически вызываться после того, как ответ будет готов к отправке в браузер.
Это иллюстрирует поведение завершения и, поскольку он является индикатором состояния готовности ответа к отправкев браузер это не сделало бы, поскольку в случае консольной команды.
Также, если вы углубитесь в исходный код laravel, вы увидите, что оба ядра (http и ядро консоли) обрабатывают жизненный цикл немного по-разному.на последнем этапе.Это правда, что у них одинаковый жизненный цикл в отношении метода handle
, но при завершении они действуют по-разному:
Ядро консоли вызывает только $this->app->terminate();
, что просто завершает работу всего приложения, тогда как ядро http такжевыполняет $this->terminateMiddleware($request, $response);
перед завершением вызова приложения.Таким образом, именно поэтому метод terminate не работает с консольными командами.
Так что для регистрации в конце команды вы должны просто поместить ее в конец функции handle.Или вы можете определить свою собственную функцию завершения, которую нужно вызывать вручную.
Надеюсь, это ответит на ваш вопрос.