В оболочке я могу создать миграцию базы данных (например) следующим образом:
./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 help
сопровождаемый именем команды.
Я думаю, что вы хотели спросить о «make: миграция». Так, например php artisan help make:migration
показывает, что он принимает параметр с именем «имя». Таким образом, вы можете назвать это так: Artisan::call('make:migration', ['name' => 'foo' ])
,
В laravel 5.1 вы устанавливаете параметры со значениями / без значений при вызове команды Artisan из своего кода PHP.
Artisan::call('your:commandname', ['--optionwithvalue' => 'youroptionvalue', '--optionwithoutvalue' => true]);
в этом случае, внутри вашей команды ремесленника;
$this->option('optionwithvalue'); //returns 'youroptionvalue'
$this->option('optionwithoutvalue'); //returns true
Я знаю, что этот вопрос довольно старый, но он появился первым в моем поиске в 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]);
Для получения дополнительной информации обратитесь к этому статья.