web-dev-qa-db-fra.com

Laravel command - Uniquement argument optionnel

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

11
TheNiceGuy

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