Php Laravel命令-仅可选参数

Php Laravel命令-仅可选参数,php,laravel,laravel-5.1,laravel-artisan,Php,Laravel,Laravel 5.1,Laravel Artisan,我有一个有这个签名的命令 order:check {--order} 并执行以下操作: php artisan order:check --order 7 由于某种原因,导致此异常 [RuntimeException] Too many arguments, expected arguments "command". 为什么??我希望此命令可以作为php artisan order:check执行,或者使用可选的

我有一个有这个签名的命令

order:check {--order}
并执行以下操作:

php artisan order:check --order 7
由于某种原因,导致此异常

  [RuntimeException]                                 
  Too many arguments, expected arguments "command".  
为什么??我希望此命令可以作为
php artisan order:check
执行,或者使用可选的order id
php artisan order:check--order X

执行
{--order}
选项(没有
=
符号)声明一个不带参数的开关选项。如果开关选项存在,则其值等于
true
,如果不存在,
false
--help
类似于开关,不需要参数)

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

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

protected $signature = 'order:check {--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

尝试
--order=X
。它可能将7解析为一个单独的参数,而不是选项值。@aynber仍然需要在命令定义中添加等号,如Cyout@Michael阅读:Options With value一节在本例中,我认为他应该使用下面的命令
php artisan order:check--order=7执行it@teeyo你描述“官方”语法,但命令解析器支持两种常见参数格式<代码>--订单7
在大多数情况下也适用。