web-dev-qa-db-ja.com

Laravel command-オプションの引数のみ

このシグネチャを持つコマンドがあります

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

11
TheNiceGuy

{--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
17
Cy Rossignol