web-dev-qa-db-fra.com

Utiliser Artisan :: call () pour passer des arguments sans option

Dans le Shell, je peux créer une migration de base de données (par exemple) comme ceci:

./artisan migrate:make --table="mytable" mymigration

En utilisant Artisan :: call (), je ne peux pas trouver comment passer un paramètre sans argument ("mymigration" dans cet exemple). J'ai essayé de nombreuses variantes du code ci-dessous:

Artisan::call('db:migrate', ['--table' => 'mytable', 'mymigration'])

Quelqu'un a une idée? J'ai utilisé Shell_exec ('./ artisan ...') en attendant, mais je ne suis pas satisfait de l'approche.

18
GuruBob

Artisan::call('db:migrate', ['' => 'mymigration', '--table' => 'mytable']) devrait fonctionner.

Incidemment, db: migrate n'est pas une commande artisanale prête à l'emploi. Êtes-vous sûr que c'est correct?

18
Bower

Dans laravel 5.1, vous définissez des options avec/sans valeurs lors de l'appel d'une commande Artisan à partir de votre code PHP.

Artisan::call('your:commandname', ['--optionwithvalue' => 'youroptionvalue', '--optionwithoutvalue' => true]);

dans ce cas, à l'intérieur de votre commande d'artisan;

$this->option('optionwithvalue'); //returns 'youroptionvalue'

$this->option('optionwithoutvalue'); //returns true
15
iko

La solution est différente si vous utilisez Laravel 5.1 ou plus récent. Maintenant, ce que vous devez faire, c'est que vous devez connaître le nom qui a été donné à l'argument dans la signature de la commande. Vous pouvez trouver le nom de l'argument de votre commande Shell en utilisant php artisan help suivi du nom de la commande.

Je pense que vous vouliez poser des questions sur "make: migration". Ainsi, par exemple, php artisan help make:migration Vous montre qu'il accepte un paramètre appelé "nom". Vous pouvez donc l'appeler comme ceci: Artisan::call('make:migration', ['name' => 'foo' ]).

10
orrd

Je sais que cette question est assez ancienne, mais elle est apparue en premier dans ma recherche Google, je vais donc l'ajouter ici. La réponse de @ orrd est correcte mais j'ajouterai également que pour les cas qui utilisent un tableau d'arguments où vous utilisez l'astérisque * vous devez fournir les arguments sous forme de tableau.

Par exemple, si vous avez une commande qui utilise des arguments de tableau avec une signature comme:

protected $signature = 'command:do-something {arg_name*}';

Dans ces cas, vous devez fournir les arguments dans un tableau lorsque vous l'appelez.

$this->call('command:do-something', ['arg_name' => ['value']]);
$this->call('command:do-something', ['arg_name' => ['value', 'another-value']]);
3
Sarcastron

Dans votre commande, vous ajoutez getArguments ():

/**
 * Get the console command arguments.
 *
 * @return array
 */
protected function getArguments()
{
    return array(
        array('fdmprinterpath', InputArgument::REQUIRED, 'Basic slice config path'),
        array('configpath', InputArgument::REQUIRED, 'User slice config path'),
        array('gcodepath', InputArgument::REQUIRED, 'Path for the generated gcode'),
        array('tempstlpath', InputArgument::REQUIRED, 'Path for the model that will be sliced'),
        array('uid', InputArgument::REQUIRED, 'User id'),
    );
}

Vous pouvez utiliser les arguments:

$fdmprinterpath = $this->argument('fdmprinterpath');
$configpath     = $this->argument('configpath');
$gcodepath      = $this->argument('gcodepath');
$tempstlpath    = $this->argument('tempstlpath');
$uid            = $this->argument('uid');

vous appeler avec des paramètres:

Artisan::call('command:slice-model', ['fdmprinterpath' => $fdmprinterpath, 'configpath' => $configpath, 'gcodepath' => $gcodepath, 'tempstlpath' => $tempstlpath]);

Pour plus d'informations, reportez-vous à cette article .

2
Kris Roofe