Команду запускають cron, CI, скрипти деплою - не люди. Їй треба повідомляти результат так, щоб це зрозуміла машина.
Коди виходу: 0 - успіх, будь-що інше - збій. Скрипт деплою й CI зупиняються саме на ненульовому коді.
if ($failed > 0) {
$this->error("{$failed} записів не оброблено");
return self::FAILURE;
}
return self::SUCCESS;
// або з будь-якого місця
$this->fail('Немає підключення до API');
Команда, що ловить винятки й завжди повертає 0, приховує збої від усього навколо.
Інше, що варто мати:
- неінтерактивність: без
confirm()іask()у шляху виконання за розкладом; підтвердження руйнівних дій - через--forceі перевіркуisProduction(); - журнал, а не лише консоль:
$this->info()бачить лише той, хто дивиться в термінал; підсумок і помилки - ще й уLog; --dry-runдля команд, що змінюють дані, - показати, що буде змінено;- прогрес і підсумок (оброблено, пропущено, помилки) - щоб було видно, що команда не зависла;
- тести:
$this->artisan('reports:send', ['user' => 7])->assertSuccessful()->expectsOutputToContain('Надіслано').