Почему в командах Laravel 10 метод handle(): void?

Почему в методе handle прописан ожидаемый тип void, а не int?

Понятней же когда handle возвращает число

  • 0 - всё хорошо
  • 1 - всё плохо
  • 2 - всё плохо ...
    /**
     * Execute the console command.
     */
    public function handle(): void
    {
     //...
    }

Ответы (2 шт):

Автор решения: Vladimir Gonchar

Все всё равно пишут свою информацию выполнения, чтобы было понятно из консоли. Скорее всего поэтому Laravel перестал генерировать код с возвратом конкретного числа.

Если ничего не передано, команда под капотом всё равно вернёт 0. Поэтому если требуется, можете передать свои значения и заменить тип на int:

return Command::SUCCESS; // 0
return Command::FAILURE; // 1
return Command::INVALID; // 2
→ Ссылка
Автор решения: Алексей Шиманский

Думаю дело тут в следовании паттерну CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который предлагает разделить операции записи и чтения данных в приложении на две отдельные ветки.

Команды - для insert/update/delete, запросы - на select, соответственно

Команды - меняют состояние системы и не возваращют никаких данных, запросы, наоборот, не меняют состояние системы и возвращают какие-то данные наружу.

Плюсы такого подхода - в возможности асинхронности команд. Например, нужно загрузить видео. Пользователь выбирает его на компе, нажимает "загрузить" и может дальше спокойно гулять по сайту. В какой-то момент (не важно когда), может прилететь уведомление, что "видео загружено, можете посмотреть". Важно понять, что само это сообщение будет показано как следствие подписки на событие, а не как следствие возвращаемого ответа от команды.

Более подробно про CQRS читайте в интернете))

→ Ссылка