Разработка Artisan-команд
12.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'));