The*_*Guy 12 php laravel artisan laravel-5.1
我有一个带有此签名的命令
order:check {--order}
Run Code Online (Sandbox Code Playgroud)
并执行此:
php artisan order:check --order 7
Run Code Online (Sandbox Code Playgroud)
由于某种原因导致此异常
[RuntimeException]
Too many arguments, expected arguments "command".
Run Code Online (Sandbox Code Playgroud)
为什么?我希望这个命令既可以作为php artisan order:check可选订单ID 执行,也可以使用可选订单ID执行php artisan order:check --order X
Cy *_*nol 20
的{--order}选项(无=符号)声明了一个开关选项,这需要没有参数.如果存在switch选项,则其值等于true,并且当不存在时,false(--help就像一个switch-no arguments).
当我们在此命令的命令行上提供参数时,控制台框架无法将输入与带参数的选项匹配,因此它会抛出错误,如问题所示.
要允许该选项接受参数,请将命令更改$signature为:
protected $signature = 'order:check {--order=}'
Run Code Online (Sandbox Code Playgroud)
注意之后添加等号--order.这告诉框架该--order选项需要一个参数 - 如果用户没有提供参数,该命令将抛出异常.
如果我们希望我们的命令接受带或不带参数的选项,我们可以使用类似的语法来提供默认值:
protected $signature = 'order:check {--order=7}'
Run Code Online (Sandbox Code Playgroud)
......但这对这个特殊情况似乎没有用.
在我们设置之后,我们可以调用命令,传递参数--order.该框架支持两种格式:
$ php artisan order:check --order=7
$ php artisan order:check --order 7
Run Code Online (Sandbox Code Playgroud)
...然后使用order我们命令中的值:
$orderNumber = $this->option('order'); // 7
Run Code Online (Sandbox Code Playgroud)
上面的答案是正确的,但仍试图添加一些额外的点。希望以下内容有所帮助
强制参数
protected $signature = 'order:check {param}';
Run Code Online (Sandbox Code Playgroud)
可选参数
protected $signature = 'order:check {param?}';
Run Code Online (Sandbox Code Playgroud)
具有默认值的可选参数
protected $signature = 'order:check {param=foo}';
Run Code Online (Sandbox Code Playgroud)
参考: https: //laravel.com/docs/5.2/artisan
| 归档时间: |
|
| 查看次数: |
8442 次 |
| 最近记录: |