2017-10-10 8 views
3

私はこの署名Laravelコマンド - のみのオプションの引数

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

+0

--order = X ' '試してみてください。これは、オプション値ではなく別の引数として7を解析している可能性があります。 – aynber

+0

@aynberまだ彼は指し示されたように、Cyのようなコマンドの定義に等号を追加する必要があります – teeyo

+0

@Michaelはセクションを読んでいます:**値付きオプション** https://laravel.com/docs/5.5/artisan – teeyo

答えて

4

=符号なし){--order}オプションで引数を取らないスイッチオプションを宣言し、実行することができることを望みます。スイッチオプションが存在する場合、その値は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->argument('order'); // 7 
+0

この場合、私は彼が 'php artisan order:check --order = 7'コマンドを実行して、それを実行すべきだと思います。 – teeyo

+2

"公式 "構文を説明していますが、コマンドパーサーは両方とも共通の引数フォーマットをサポートしています。 '--order 7'もほとんどの場合動作します。 –

関連する問題