Как передать несколько аргументов при запуске задач Laravel в командной строке?

Я создал класс 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()

Как передать несколько аргументов в этом методе?

3 ответа

Решение
class Sample_Task
{
    public function create($args) {
       $arg1 = $args[0];
       $arg2 = $args[1];
        // something here
    }
}

Ларавел 5.2

Что вам нужно сделать, это указать аргумент (или параметр, например, --option) в $signature свойство как массив. Ларавел указывает на это звездочкой.

аргументы

например, предположим, что у вас есть команда 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=*} в $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', вы получите все опции, включая логические значения для 'quiet','verbose' и т. Д.

$options = $this->option();

Вы можете получить доступ к списку идентификаторов в $options['id']

Больше информации в путеводителе Laravel Artisan.

Также можно запустить передачу атрибутов:

      php artisan image:process {id=1} {id=2} {id=3}
Другие вопросы по тегам