Чтобы использовать команду в своем планировщике, вы можете использовать ее подпись или имя класса. Каждая команда в App\Console\Commands
имеет следующее:
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = "example:command";
После того, как команда импортирована в App\Console\Kernel.php
, в массиве protected $commands = [];
ее можно использовать в функции schedule()
, но использование ExampleCommand::class
неверно:
protected function schedule(Schedule $schedule){
$schedule->command("example:command --force")->everyMinute();
$schedule->command(ExampleCommand::class, ["--force"])->everyMinute();
...
}
Основная проблема здесь, кажется, связана с параметром --force
, который выдает следующую ошибку:
Опция "- force" не существует
Многие из существующих команд Laravel имеют установленный флаг --force
, который из документации делает следующее:
Принудительно запустить операцию в рабочем состоянии.
Многие команды ремесленников запрашивают ввод, когда вы запускаете команду, например php artisan migrate
, которая запрашивает
Вы уверены, что хотите запустить эту команду в рабочей среде?
Поскольку планировщик неинтерактивен, флаг --force
переопределит эту подсказку на «Да». При этом вам нужно определить и обработать опцию самостоятельно:
protected $signature = "example:command {--force}";
public function handle(){
$force = $this->option("force");
if(env("APP_ENV", "production") == "production" && !$force){
if(!$this->ask("Are you sure you want to run this in production?")){
return false; // or dd();, etc.
}
}
}
Это не проверено, но если APP_ENV=production
установлено в .env
, а $force
равно null
(по умолчанию, если --force
не включено), то оно запросит подтверждение и выйдет, если " Нет "ответил.