Laravel命令 - 只有可选参数

时间:2017-10-10 15:16:03

标签: php laravel laravel-5.1 artisan

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

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执行

2 个答案:

答案 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?}'