J'ai une commande avec cette signature
order:check {--order}
Et exécutez ceci:
php artisan order:check --order 7
Pour une raison qui entraîne cette exception
[RuntimeException]
Too many arguments, expected arguments "command".
Pourquoi? Je veux que cette commande soit exécutée en tant que php artisan order:check
ou avec un identifiant de commande facultatif php artisan order:check --order X
Le {--order}
option (sans =
signe) déclare une option switch, qui prend aucun argument. Si l'option switch est présente, sa valeur est égale à true
et, en cas d'absence, false
(--help
est comme un commutateur - aucun argument n'est nécessaire).
Lorsque nous fournissons un argument sur la ligne de commande pour cette option, le cadre de la console ne peut pas faire correspondre l'entrée à une option avec un argument, il renvoie donc l'erreur comme indiqué dans la question.
Pour autoriser l'option à accepter un argument, modifiez la commande $signature
à:
protected $signature = 'order:check {--order=}'
Notez l'ajout du signe égal après --order
. Cela indique au framework que le --order
option nécessite un argument - la commande lèvera une exception si l'utilisateur n'en fournit pas.
Si nous voulons que notre commande accepte une option avec ou sans un argument, nous pouvons utiliser une syntaxe similaire pour fournir une valeur par défaut:
protected $signature = 'order:check {--order=7}'
... mais cela ne semble pas utile pour ce cas particulier.
Après avoir configuré cela, nous pouvons appeler la commande, en passant un argument pour --order
. Le cadre prend en charge les deux formats:
$ php artisan order:check --order=7
$ php artisan order:check --order 7
... puis utilisez la valeur de order
dans notre commande:
$orderNumber = $this->option('order'); // 7