Laravel 命令 - 仅可选参数

2022-08-30 17:01:48

我有一个带有此签名的命令

order:check {--order}

并执行此操作:

php artisan order:check --order 7

由于某种原因导致此异常

  [RuntimeException]                                 
  Too many arguments, expected arguments "command".  

为什么?我希望此命令可以作为或具有可选订单ID执行php artisan order:checkphp artisan order:check --order X


答案 1

该选项(不带符号)声明一个开关选项,该选项不带任何参数。如果开关选项存在,则其值等于 ,并且当不存在时,( 就像开关一样 - 不需要参数)。{--order}=truefalse--help

当我们在命令行上为此选项提供参数时,控制台框架无法将输入与具有参数的选项相匹配,因此它会抛出错误,如问题中所示。

要允许该选项接受参数,请将命令更改为:$signature

protected $signature = 'order:check {--order=}'

请注意在 后面添加等号。这告诉框架该选项需要一个参数 - 如果用户不提供参数,则该命令将引发异常。--order--order

如果我们希望我们的命令接受带或不带参数的选项,我们可以使用类似的语法来提供默认值:

protected $signature = 'order:check {--order=7}'

...但这对这种特殊情况似乎没有用。

设置后,我们可以调用该命令,为 传递一个参数。该框架支持这两种格式:--order

$ php artisan order:check --order=7 
$ php artisan order:check --order 7 

...然后在我们的命令中使用 的值:order

$orderNumber = $this->option('order');  // 7

答案 2

上面的答案是正确的,但仍然试图增加一些额外的分数。希望以下事情有所帮助

强制参数

protected $signature = 'order:check {param}';

可选参数

protected $signature = 'order:check {param?}';

具有默认值的可选参数

protected $signature = 'order:check {param=foo}';

参考资料: https://laravel.com/docs/5.2/artisan


推荐