Почему в командах Laravel 10 метод handle(): void?
Почему в методе handle прописан ожидаемый тип void, а не int?
Понятней же когда handle возвращает число
- 0 - всё хорошо
- 1 - всё плохо
- 2 - всё плохо ...
/**
* Execute the console command.
*/
public function handle(): void
{
//...
}
Ответы (2 шт):
Все всё равно пишут свою информацию выполнения, чтобы было понятно из консоли. Скорее всего поэтому 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 читайте в интернете))