在命令行运行Laravel任务时如何传递多个参数?

a14dhokn  于 2023-01-06  发布在  其他
关注(0)|答案(3)|浏览(354)

我创建了一个Task类,它的方法需要多个参数:

class Sample_Task
{
    public function create($arg1, $arg2) {
        // something here
    }
}

但看起来工匠只得到了第一个论点:

php artisan sample:create arg1 arg2

错误信息:

Warning: Missing argument 2 for Sample_Task::create()

如何在这个方法中传递多个参数?

kr98yfug

kr98yfug1#

  • 拉腊维尔5.2 *

您需要做的是在$signature属性中指定参数(或选项,例如--option)作为数组。Laravel用星号表示这一点。

    • 参数**

例如,假设您有一个Artisan命令来"处理"图像:

protected $signature = 'image:process {id*}';

如果您这样做:

php artisan help image:process

... Laravel将负责添加正确的Unix风格语法:

Usage:
  image:process <id> (<id>)...

要在handle()方法中访问该列表,只需使用:

$arguments = $this->argument('id');

foreach($arguments as $arg) {
   ...
}
    • 选项**

我说它对选项也有效,你可以在$signature中使用{--id=*}
帮助文本将显示:

Usage:
  image:process [options]

Options:
      --id[=ID]         (multiple values allowed)
  -h, --help            Display this help message

  ...

因此,用户可以键入:

php artisan image:process --id=1 --id=2 --id=3

要访问handle()中的数据,可以使用:

$ids = $this->option('id');

如果省略'id',将得到 * all * 选项,包括'quiet'、'verbose'等的布尔值。

$options = $this->option();

您可以访问$options['id']中的ID列表
更多信息请参见Laravel Artisan guide

pieyvz9o

pieyvz9o2#

class Sample_Task
{
    public function create($args) {
       $arg1 = $args[0];
       $arg2 = $args[1];
        // something here
    }
}
2sbarzqh

2sbarzqh3#

也可以运行传递属性:

php artisan image:process {id=1} {id=2} {id=3}

相关问题