Разработка Artisan-команд
11.x
.
Почему это важно?
Введение
В дополнение к командам, предоставляемых Artisan’ом, Вы также можете создавать свои собственные команды для работы с Вашим приложением. Вы можете хранить свои команды в директории app/commands
; однако, вы вправе сами выбирать место для хранения, убедившись, что команды могут быть автоматически загружены, основываясь на настройках в Вашем composer.json
.
Создание Команды
Генерация Класса
Для создания новой команды, вы можете воспользоваться командой Artisana’а command:make
, которая сгенерирует макет класса:
Сгенерируйте новый класс команды
php artisan command:make FooCommand
По умолчанию Ваши команды будут помещены в директорию app/commands
; однако, Вы можете указать произвольный путь или пространство имен:
php artisan command:make FooCommand --path=app/classes --namespace=Classes
Создавая команду, опция --command
может быть использована для назначения имени команды:
php artisan command:make AssignUsers --command=users:assign
Написание Команды
Как только Ваша команда будет сгенерирована, следует заполнить свойства класса name
и description
, которые будут использованы при отображении команды в списке.
Метож fire
будет вызван как только ваша команда будет запущена. Вы можете поместить в этот метод любую логику.
Аргументы И Опции
В методах getArguments
и getOptions
вы можете определить произвольные аргументы или опции, которые будет принимать Ваша команда. Оба этих метода возвращают массив команд, описываемых списокм полей массива.
Массив, определяющий аргумент
, выглядит так:
array($name, $mode, $description, $defaultValue)
Аргумент mode
может принимать одно из следующих значений: InputAgrument::REQUIRED
(обязтельный) или InputArgument::OPTIONAL
(необязательный).
Массив, определяющий опцию
, выглядит следующим образом:
array($name, $shortcut, $mode, $description, $defaultValue)
Для опций, аргумент mode
может быть: InputOption::VALUE_REQUIRED
(значение обязательно), InputOption::VALUE_OPTIONAL
(значение необязательно), InputOption::VALUE_IS_ARRAY
(значение – это массив), InputOption::VALUE_NONE
(нет значения).
Режим VALUE_IS_ARRAY
обозначает, что этот переключатель может быть использован несколько раз при вызове команды:
php artisan foo --option=bar --option=baz
Значение VALUE_NONE
означает, что опция просто используется как “переключатель”:
php artisan foo --option
Получение ввода
Во время исполнения команды, очевидно, потребуется получать значения переданных аргументов и опций. Для этого можно воспользоваться методами argument
и option
:
Получение значения аргумента команды
$value = $this->argument('name');
Получение всех аргументов
$arguments = $this->argument();
Получение значения опции команды
$value = $this->option('name');
Получение всех опций
$options = $this->option();
Вывод команды
Для вывода данных в консоль Вы можете использовать методы info
(информация), comment
(комментарий), question
(вопрос) и error
(ошибка). Каждый из этих методов будет использовать цвет по стандарту ANSI, соответствующий смыслу метода.
Вывод информации в консоль
$this->info('Отобразить это на экране');
Вывод сообщений об ошибке в консоль
$this->error('Что-то пошло не так!');
Взаимодействие с пользователем
Вы также можете воспользоваться методами ask
и confirm
для обеспечения пользовательского ввода:
Попросить пользователя ввести данные:
$name = $this->ask('Как Вас зовут?');
Попросить пользователя ввести секретные данные:
$password = $this->secret('Какой пароль?');
Попросить пользователя подтвердить что-то:
if ($this->confirm('Вы желаете продолжить? [yes|no]'))
{
//
}
Вы таежке можете указать ответ по умолчанию для метода confirm
. Это должно быть true
или false
:
$this->confirm($question, true);
Регистрация Команд
Регистрация команды Artisan'а
Как только Вша команда будет готова, Вам нужно зарегистрировать ее в Artisan’е, чтобы воспользоваться ею. Обычно это делается в файле app/start/artisan.php
. В этом файле вы можете вопользоваться методом Artisan::add
для того, чтобы зарегистрировать команду:
Artisan::add(new CustomCommand);
Регистрация команды, зарегистрированной в IoC контейнере
Если Ваша команда зарегистрирована в IoC контейнере приложения, необходимо воспользоваться методом Artisan::resolve
, чтобы команда стала доступной Artisan’у:
Artisan::resolve('binding.name');
Регистрация команд внутри сервис-провайдеров (Service Provider)
Если Вам необходимо зарегистрировать команды внутри сервис-провайдера, следует вызывать метод commands
из метода boot
провайдера, передавая в качестве аргумента зарегистрированное имя в IoC контейнере:
public function boot()
{
$this->commands('command.binding');
}
Вызов других команд
Иногда может потребоваться вызвать другую команду из Вашей команды. Это можно сделать, вызвав метод call
:
$this->call('command:name', array('argument' => 'foo', '--option' => 'bar'));