Публикации - Artisan

Разработка команд artisan

В дополнение к командам, предоставляемых фрэймворком, artisan предоставляет возможность создавать свои собственные команды, необходимые разрабатываемому приложению. Свои команды можно хранить как в директории app/Console, так и самостоятельно выбирать место для хранения, прежде убедившись, что команды будут автоматически загружены, основываясь на настройках composer.json.

Для создания новой команды воспользуемся командой artisan-а make:console, которая сгенерирует макет класса:

Создание нового класса команды. Листинг 2.1

php artisan make:console FooCommand

Команда выше сгенерирует класс app/Console/FooCommand.php.

Создавая команду, опция --command может быть использована для назначения имени команды в консоли:

Использование опции --command. Листинг 2.2

php artisan make:console AssignUsers --command=users:assign

Как только команда будет сгенерирована, необходимо заполнить свойства класса name и description, которые будут использованы при отображении команды в списке.

Метод fire будет вызван как только команда будет запущена. Вы можете поместить в этот метод любую логику.

В методах getArguments и getOptions можно определить любые аргументы или опции, которые будет принимать команда. Оба этих метода возвращают массив команд, описываемых списком полей массива.

Массив, определяющий аргументы, выглядит так:

Массив определяющий аргументы. Листинг 2.3

array($name, $mode, $description, $defaultValue)

Аргумент mode может принимать одно из следующих значений: InputArgument::REQUIRED (обязательный) или InputArgument::OPTIONAL (необязательный).

Массив, определяющий опции, выглядит следующим образом:

Массив, определяющий аргументы. Листинг 2.4

array($name, $shortcut, $mode, $description, $defaultValue)

Для опций аргумент mode может быть: InputOption::VALUE_REQUIRED (значение обязательно), InputOption::VALUE_OPTIONAL (значение необязательно), InputOption::VALUE_IS_ARRAY (значение - это массив), InputOption::VALUE_NONE (нет значения).

Режим VALUE_IS_ARRAY обозначает, что этот переключатель может быть использован несколько раз при вызове команды:

Вызов команды с использованием режима VALUE_IS_ARRAY. Листинг 2.5

php artisan foo --option=bar --option=baz

Значение VALUE_NONE означает, что опция просто используется как "переключатель":

Вызов команды с использованием опции переключателя. Листинг 2.6

php artisan foo --option

Во время выполнения команды, очевидно, потребуется получать значения переданных аргументов и опций. Для этого можно воспользоваться методами argument и option:

Вывод переданных значений аргументов и опций. Листинг 2.7

//Получение значения аргумента команды

$value = $this->argument('name');

//Получение всех аргументов

$arguments = $this->argument();

//Получение значения опции команды

$value = $this->option('name');

//Получениевсехопций

$options = $this->option();

Для вывода данных в консоль вы можете использовать методы info (информация), comment (комментарий), question (вопрос) и error (ошибка). Каждый из этих методов будет использовать цвет по стандарту ANSI, соответствующий смыслу метода.

Вывод команды. Листинг 2.8

//Выводинформациивконсоль

$this->info('Display this on the screen');

//Вывод сообщений об ошибке в консоль

$this->error('Something went wrong!');

Для обеспечения пользовательского ввода, можно воспользоваться методами ask иconfirm.

Пользовательский ввод. Листинг 2.9

//Попросить пользователя ввести данные:

$name = $this->ask('What is your name?');

//Попросить пользователя ввести секретные данные:

$password = $this->secret('Whatisthepassword?');

Попросить пользователя подтвердить что-то:

if ($this->confirm('Doyouwishtocontinue? [yes|no]'))

{

//

}

Также можно указать ответ по умолчанию для метода confirm. Это должно быть true или false:

Ответ по умолчанию для метода confirm. Листинг 2.10

$this->confirm($question, true);

Как только команда будет готова, нужно зарегистрировать её в Artisan-е, чтобы она была доступна для использования. Обычно это делается в файле app/Providers/ArtisanServiceProvider.php. В этом же файле команду можно зарегестрировать в контейнере IoC. Для регистрации имеется специальный метод commands. По умолчанию, образец регистрации команды включен в сервис-провайдер. Например:

Пример регистрации команды. Листинг 2.11

$this->app->bindShared('commands.inspire', function()

{

return new InspireCommand;

});

Как только команда зарегистрирована в IoC контейнере, воспользуемся commands сервис-провайдера, чтобы сделать её доступной в artisan-е. Необходимо передать название, использованное при регистрации команды в IoC контейнере:

Передача названия, использованное при регистрации команды. Листинг 2.12

$this->commands('commands.inspire');

Иногда может потребоваться вызвать другую команду из вашей команды. Это можно сделать, используя метод call:

Вызов другой команды из текущей команды. Листинг 6.17

$this->call('command:name', array('argument' => 'foo', '--option' => 'bar'));


 

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться