このシグネチャを持つコマンドがあります
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オプションを宣言します。これは引数なしを取ります。スイッチオプションが存在する場合、その値はtrue
に等しく、存在しない場合はfalse
(--help
はスイッチのようなものです。引数は不要です)。
このオプションのコマンドラインで引数を指定すると、コンソールフレームワークは引数への入力とオプションを一致させることができないため、質問に示されているようにエラーをスローします。
オプションが引数を受け入れるようにするには、コマンドの$signature
を次のように変更します。
protected $signature = 'order:check {--order=}'
--order
の後に等号が追加されていることに注意してください。これは、フレームワークに--order
オプション必須引数であることを伝えます。ユーザーが指定しない場合、コマンドは例外をスローします。
コマンドでオプションwithなし引数を受け入れる場合、同様の構文を使用してデフォルト値を指定できます。
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