2017-10-10 1 views
3

Ich habe einen Befehl mit dieser SignaturLaravel Befehl - Nur optionales Argument

order:check {--order} 

und führen dies:

php artisan order:check --order 7 

Aus irgendeinem Grund, die

[RuntimeException]         
    Too many arguments, expected arguments "command". 

in dieser Ausnahme ergibt Warum ? Ich mag, dass dieser Befehl entweder als php artisan order:check oder mit beliebiger Reihenfolge ID php artisan order:check --order X

+0

Try '--order = X '. Es kann die 7 als ein separates Argument anstelle eines Optionswerts analysieren. – aynber

+0

@aynber noch muss er der Definition des Befehls das Gleichheitszeichen hinzufügen, wie Cy wies darauf hin – teeyo

+0

@Michael las den Abschnitt: ** Optionen mit Werten ** https://laravel.com/docs/5.5/artisan – teeyo

Antwort

4

Die {--order} Option ausgeführt werden (ohne = Zeichen) deklariert eine Schalter Option, die keine Argumente nimmt. Wenn die Switch-Option vorhanden ist, ist der Wert gleich true und, wenn nicht vorhanden, false (--help ist wie ein Schalter — kein Argument erforderlich).

Wenn wir für diese Option ein Argument in der Befehlszeile angeben, kann das Konsolenframework die Eingabe für eine Option nicht mit einem Argument vergleichen. Daher wird der Fehler wie in der Frage angezeigt.

die Option zu ermöglichen, um ein Argument zu akzeptieren, den $signature auf Befehl ändern:

protected $signature = 'order:check {--order=}' 

Hinweis die Zugabe des Gleichheitszeichens nach --order. Dies teilt dem Framework mit, dass die --order Option erfordert ein Argument — der Befehl wird eine Ausnahme auslösen, wenn der Benutzer einen nicht bereitstellt.

Wenn wir unser Befehl wollen eine Option mit oder ohne ein Argument akzeptieren, können wir eine ähnliche Syntax verwenden, um einen Standardwert zur Verfügung zu stellen:

protected $signature = 'order:check {--order=7}' 

... aber dies scheint nicht sinnvoll für diesen speziellen Fall.

Nachdem wir dies eingerichtet haben, können wir den Befehl aufrufen und ein Argument für --order übergeben. Das Framework unterstützt beide Formate:

$ php artisan order:check --order=7 
$ php artisan order:check --order 7 

... und dann den Wert von order in unserem Befehl:

$orderNumber = $this->argument('order'); // 7 
+0

In In diesem Fall denke ich, er sollte den folgenden Befehl 'php artisan order: check --order = 7' verwenden, um es auszuführen – teeyo

+2

@teeyo Sie beschreiben die" offizielle "Syntax, aber der Befehlsparser unterstützt beide gängigen Argumentformate. '--order 7' funktioniert auch in den meisten Fällen. –

Verwandte Themen