web-dev-qa-db-ja.com

Artisan :: call()を使用してオプション以外の引数を渡す

シェルでは、たとえば次のようにデータベース移行を作成できます。

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

Artisan :: call()を使用する非引数パラメーター(この例では「mymigration」)を渡す方法がわかりません。以下のコードの多くのバリアントを試しました:

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

誰かアイデアはありますか?それまでの間、Shell_exec( './ artisan ...')を使用していますが、このアプローチには満足できません。

18
GuruBob

Artisan::call('db:migrate', ['' => 'mymigration', '--table' => 'mytable'])が機能するはずです。

ちなみに、db:migrateはすぐに使える職人のコマンドではありません。これは正しいですか?

18
Bower

laravel 5.1では、PHPコードからArtisanコマンドを呼び出すときに、値の有無にかかわらずオプションを設定します。

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

この場合、職人のコマンドの中で。

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

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

Laravel 5.1以降を使用している場合、解決策は異なります。次に、コマンドのシグネチャの引数に与えられた名前を知る必要があります。 _php artisan help_に続けてコマンド名を使用して、コマンドシェルからの引数の名前。

「make:migration」について質問するつもりだったと思います。したがって、たとえば、_php artisan help make:migration_は、「name」というパラメーターを受け入れることを示しています。したがって、次のように呼び出すことができます:Artisan::call('make:migration', ['name' => 'foo' ])

10
orrd

この質問はかなり古いですが、これは私の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']]);
3
Sarcastron

コマンドで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]);

詳細については、この 記事 を参照してください。

2
Kris Roofe