我有一个带有此签名的命令
order:check {--order}
执行此操作:
php artisan order:check --order 7
由于某种原因导致此异常
[RuntimeException]
Too many arguments, expected arguments "command".
为什么呢?我希望此命令可以php artisan order:check
执行,也可以使用可选的订单ID php artisan order:check --order X
执行
答案 0 :(得分:15)
{--order}
选项(没有=
符号)声明开关选项,该选项带有无参数。如果存在切换选项,则其值等于true
,并且,如果不存在,false
(--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
答案 1 :(得分:-1)
protected $signature = 'order:check {order?}'