2014-10-02 14 views
6

Nel guscio posso creare una migrazione di database (per esempio) in questo modo:Uso artigianale :: chiamata() per passare argomenti non opzione

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

Uso artigianale :: chiamata() Non posso capire come passare un parametro non argomento ("mymigration" in questo esempio). Ho provato molte varianti del codice qui sotto:

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

Qualcuno ha qualche idea? Ho usato shell_exec ('./ artisan ...') nel frattempo, ma non sono soddisfatto dell'approccio.

risposta

6

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

Per inciso db: migrate non è un comando artigianale fuori dalla scatola. Sei sicuro che sia corretto?

+0

Hai ragione - intendevo migrare: make - ma la domanda riguardava i comandi artigiani in generale. Grazie per la tua risposta. – GuruBob

5

La soluzione è diversa se si utilizza Laravel 5.1 o versioni successive. Ora ciò che devi fare è conoscere il nome che è stato dato all'argomento nella firma del comando. Puoi trovare il nome dell'argomento dalla shell dei comandi utilizzando php artisan help seguito dal nome del comando.

Penso che volevi chiedere di "fare: migrazione". Quindi, ad esempio php artisan help make:migration mostra che accetta un parametro chiamato "nome". Quindi puoi chiamarlo così: Artisan::call('make:migration', ['name' => 'foo' ]).

+1

Questo è anche il modo corretto per Laravel 4.2 –

+0

Questa è la soluzione che ha funzionato perfettamente per me stesso. Usando Laravel 5.3 – dxhans5

3

In laravel 5.1, si impostano le opzioni con/senza valori quando si chiama un comando Artisan dal codice PHP.

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

in questo caso, all'interno del comando artigiano;

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

$this->option('optionwithoutvalue'); //returns true 
+1

Penso che questa risposta sia risolta da un altro problema - Come passare opzioni non valore al comando artisan? Nel mio caso questa era una soluzione perché dovevo passare l'opzione '--force' al comando 'migrate'. – MingalevME

0

In comandate si aggiunge 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'), 
    ); 
} 

È possibile utilizzare gli argomenti:

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

chiamata che comando con parametri:

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

Per maggiori informazioni si riferiscono a questo article.

Problemi correlati