11

我用需要多个参数的方法创建了一个 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()

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

4

2 回答 2

14

拉拉维尔 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) {
   ...
}

选项

我说它也适用于选项,你用{--id=*}in$signature代替。

帮助文本将显示:

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”,您将获得所有选项,包括“安静”、“详细”等的布尔值。

$options = $this->option();

您可以访问 ID 列表$options['id']

Laravel Artisan 指南中的更多信息。

于 2016-08-20T09:59:17.957 回答
7
class Sample_Task
{
    public function create($args) {
       $arg1 = $args[0];
       $arg2 = $args[1];
        // something here
    }
}
于 2013-01-18T10:36:08.073 回答