php 使用Artisan::call()传递非选项参数

2admgd59  于 2023-10-15  发布在  PHP
关注(0)|答案(7)|浏览(193)

在shell中,我可以创建一个数据库迁移(例如),如下所示:

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

使用Artisan::call(),我无法解决如何传递非参数参数(本例中为“mymigration”)。我尝试了下面代码的许多变体:

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

有人有什么主意吗?我一直在使用shell_exec('./artisan...'),但我对这种方法不满意。

t9eec4r0

t9eec4r01#

Laravel 5之前

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

Laravel 5及以上版本

Artisan::call('db:migrate', ['argument-name-as-defined-in-signature-property-of-command' => 'mymigration', '--table' => 'mytable'])

请参阅其他答案了解更多详情。

qvk1mo1f

qvk1mo1f2#

在laravel 5.1中,当从PHP代码调用Artisan命令时,可以设置带/不带值的选项。

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

在这种情况下,在您的工匠命令中;

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

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

1mrurvl13#

如果你使用的是Laravel 5.1或更新版本,解决方案会有所不同。现在你需要做的是知道命令签名中参数的名字。您可以在命令shell中使用php artisan help后跟命令名来查找参数的名称。
我想你是想问“制造:移民”。例如,php artisan help make:migration显示它接受一个名为“name”的参数。所以你可以这样称呼它:Artisan::call('make:migration', ['name' => 'foo' ])

0pizxfdo

0pizxfdo4#

我知道这个问题已经很老了,但这是我在谷歌搜索中首先出现的,所以我将在这里添加这个。@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']]);
bvk5enib

bvk5enib5#

在命令中添加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');

call you命令带参数:

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

有关更多信息,请参阅此article

s8vozzvw

s8vozzvw6#

在其他替代方式中,您可以在Laravel中执行特定的迁移

Artisan::call('migrate --path=database/migrations/path_to_your_migration_with_php_extention');
6qqygrtg

6qqygrtg7#

使用

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

相关问题