Разработка Artisan-команд

Введение

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

Создание команды

Генерация класса

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

Сгенерируйте новый класс команды

php artisan make:console Foo

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

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

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

Написание команды

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

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

Аргументы и опции

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

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

[$name, $mode, $description, $defaultValue

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

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

[$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('Display this on the screen');

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

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

Взаимодействие с пользователем

Вы также можете воспользоваться методами ask и confirm для обеспечения пользовательского ввода:

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

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

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

$password = $this->secret('What is the password?');

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

if ($this->confirm('Do you wish to continue? [yes|no]'))
{
    //
}

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

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

Вызов других команд

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

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

Регистрация команд

Регистрация Artisan-команд

Как только ваша команда будет готова, вам необходимо зарегистрировать её с помощью Artisan CLI, чтобы она была доступна для использования. Это делается в файле app/Console/Kernel.php, в свойстве commands:

protected $commands = [
    'App\Console\Commands\Inspire',
];

Для регистрации вашей команды просто добавьте её в этот массив. Когда Artisan загрузится, все команды из этого массива будут автоматически определены с помощь IoC-контейнера и зарегистрированы.