Laravel 命令 - 只有可选参数

Laravel command - Only optional argument

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

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

执行

{--order} 选项(没有 = 符号)声明了一个 switch 选项,它采用 无参数.如果存在 switch 选项,其值等于 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