Как передать несколько аргументов при запуске задач 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}