在shell中我可以像这样创建数据库迁移(例如):
./artisan migrate:make --table="mytable" mymigration
使用Artisan :: call()我无法弄清楚如何传递非参数参数(在本例中为“mymigration”)。我已尝试过以下代码的许多变体:
Artisan::call('db:migrate', ['--table' => 'mytable', 'mymigration'])
有人有任何想法吗?我一直在使用shell_exec('。/ artisan ......'),但我对这种方法不满意。
答案 0 :(得分:17)
Artisan::call('db:migrate', ['' => 'mymigration', '--table' => 'mytable'])
应该有用。
顺便说一下db:migrate并不是一个开箱即用的工匠命令。你确定这是对的吗?
答案 1 :(得分:11)
在laravel 5.1中,当您从PHP代码调用Artisan命令时,可以使用/不设置值来设置选项。
Artisan::call('your:commandname', ['--optionwithvalue' => 'youroptionvalue', '--optionwithoutvalue' => true]);
在这种情况下,在你的工匠命令中;
$this->option('optionwithvalue'); //returns 'youroptionvalue'
$this->option('optionwithoutvalue'); //returns true
答案 2 :(得分:10)
如果您使用的是Laravel 5.1或更高版本,解决方案会有所不同。现在你需要做的是你需要知道命令签名中赋予参数的名称。您可以使用php artisan help
后跟命令名从命令shell中找到参数的名称。
我想你想问一下“make:migration”。因此,例如php artisan help make:migration
向您显示它接受名为“name”的参数。所以你可以这样称呼:Artisan::call('make:migration', ['name' => 'foo' ])
。
答案 3 :(得分:1)
在你的命令中添加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]);
有关详细信息,请参阅此article。
答案 4 :(得分:1)
我知道这个问题已经很老了,但是这个问题首先出现在我的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']]);
答案 5 :(得分:0)
使用
Artisan::call('db:migrate', ['--table' => 'mytable', 'mymigration'=>true])