Передайте необязательный аргумент Laravel 5.8, cron job - PullRequest
0 голосов
/ 04 июля 2019
protected $signature = 'do_command {import=false}';
public function handle(){
    $import= $this->argument('import');

    if($import){
        // do something else
    }

}

и я использую его в контроллере, а НЕ только:

    $command = 'do_command';
    $option = null;
    if($import){
        $option = 'import';
    }
    Artisan::call($command, [$option]);

Проблема в том, что не имеет значения, если $import в контроллере равно true/false, еслиоператор всегда выполняется, и $this->argument('import') всегда истинно в методе handle, даже если я вызываю Artisan::call($command) без второго аргумента.

Ответы [ 2 ]

3 голосов
/ 04 июля 2019

Вы определяете значение по умолчанию import как false, которое будет string.Поэтому условие if в вашей команде всегда будет true:

if ($import) {
    // 
}

. Что вы можете сделать, так это изменить сигнатуру, чтобы в параметре импорта было указано необязательно .

protected $signature = 'command:name {import?}';

Тогда в вашем контроллере:

Artisan::call($command, [
    'import' => $import,
]);
1 голос
/ 04 июля 2019

Сначала определите параметры как параметры.

class GenerateApiToken extends Command
{
    protected $signature = "apitoken:generate
    {--id= : A description of the option}
    {--value= : A description of the option}
    ";

    public function handle()
    {
        $id = $this->option('id');
        $value = $this->option('value');
    ...

Затем возьмите их, используя $this->option()

Чтобы использовать их при звонке из приложения:

Artisan::call('apitoken:generate', ['id' => $id]);

Edit: я думаю, что ваша причина не работает, потому что массив, который вы передаете команду во втором параметре ::call(), не является ассоциативным массивом с именами ключей, представляющими опции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...