Версия фреймворка:
5.4 4.2
Прогресс перевода
Перевод немного отстаёт от оригинала. Коммитов не переведено: 1

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

Введение

В дополнение к командам, предоставляемых 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'));