シェルでは、たとえば次のようにデータベース移行を作成できます。
./artisan migrate:make --table="mytable" mymigration
Artisan :: call()を使用する非引数パラメーター(この例では「mymigration」)を渡す方法がわかりません。以下のコードの多くのバリアントを試しました:
Artisan::call('db:migrate', ['--table' => 'mytable', 'mymigration'])
誰かアイデアはありますか?それまでの間、Shell_exec( './ artisan ...')を使用していますが、このアプローチには満足できません。
Artisan::call('db:migrate', ['' => 'mymigration', '--table' => 'mytable'])
が機能するはずです。
ちなみに、db:migrateはすぐに使える職人のコマンドではありません。これは正しいですか?
laravel 5.1では、PHPコードからArtisanコマンドを呼び出すときに、値の有無にかかわらずオプションを設定します。
Artisan::call('your:commandname', ['--optionwithvalue' => 'youroptionvalue', '--optionwithoutvalue' => true]);
この場合、職人のコマンドの中で。
$this->option('optionwithvalue'); //returns 'youroptionvalue'
$this->option('optionwithoutvalue'); //returns true
Laravel 5.1以降を使用している場合、解決策は異なります。次に、コマンドのシグネチャの引数に与えられた名前を知る必要があります。 _php artisan help
_に続けてコマンド名を使用して、コマンドシェルからの引数の名前。
「make:migration」について質問するつもりだったと思います。したがって、たとえば、_php artisan help make:migration
_は、「name」というパラメーターを受け入れることを示しています。したがって、次のように呼び出すことができます:Artisan::call('make:migration', ['name' => 'foo' ])
。
この質問はかなり古いですが、これは私のGoogle検索で最初に出てきたので、ここに追加します。 @orrdの答えは正しいですが、アスタリスク*
を使用する引数の配列を使用する場合は、引数を配列として指定する必要がある場合にも追加します。
たとえば、次のようなシグネチャを持つ配列引数を使用するコマンドがあるとします。
protected $signature = 'command:do-something {arg_name*}';
このような場合、呼び出すときに配列に引数を指定する必要があります。
$this->call('command:do-something', ['arg_name' => ['value']]);
$this->call('command:do-something', ['arg_name' => ['value', 'another-value']]);
コマンドで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'),
);
}
引数を使用できます。
$fdmprinterpath = $this->argument('fdmprinterpath');
$configpath = $this->argument('configpath');
$gcodepath = $this->argument('gcodepath');
$tempstlpath = $this->argument('tempstlpath');
$uid = $this->argument('uid');
パラメータを指定してコマンドを呼び出します:
Artisan::call('command:slice-model', ['fdmprinterpath' => $fdmprinterpath, 'configpath' => $configpath, 'gcodepath' => $gcodepath, 'tempstlpath' => $tempstlpath]);
詳細については、この 記事 を参照してください。