Введение
В дополнение к стандартным командам Artisan вы можете также добавлять свои собственные команды для работы с приложением. Вы можете поместить их в папку app/commands, либо в любое другое место, в котором их сможет найти автозагрузчик в соответствии с вашим файлом composer.json.
Создание команды
Создание класса
Для создания новой команды можно использовать команду command:make, которая создаст заглушку, с которой вы можете начать работать.
Генерация нового класса команды
shphp artisan command:make FooCommand
По умолчанию сгенерированные команды помещаются в папку app/commands, однако вы можете указать произвольное расположение или пространство имён:
shphp artisan command:make FooCommand --path=app/classes --namespace=Classes
добавлено в 4.1 ()
Написание команды
Когда вы сгенерировали класс команды, вам нужно заполнить его свойства PHP$name
и PHP$description
, которые используются при отображении вашей команды в списке команд (artisan list).
Метод fire будет вызван при вызове вашей команды. В него вы можете поместить любую нужную логику.
Параметры и ключи
Методы PHPgetArguments()
и PHPgetOptions()
служат для определения параметров и ключей, которые ваша команда принимает на вход. Оба эти метода могут возвращать массив команд, которые описываются как массив ключей.
При определении PHP$arguments
массив имеет такую форму:
array($name, $mode, $description, $defaultValue)
Параметр PHP$mode
может быть объектом PHPInputArgument::REQUIRED
или PHPInputArgument::OPTIONAL
.
При определении PHP$options
, массив выглядит так:
array($name, $shortcut, $mode, $description, $defaultValue)
PHP$mode
для ключей может быть любым из этих объектов: PHPInputOption::VALUE_REQUIRED
, PHPInputOption::VALUE_OPTIONAL
, PHPInputOption::VALUE_IS_ARRAY
, PHPInputOption::VALUE_NONE
.
Режим PHPVALUE_IS_ARRAY
указывает, что ключ может быть передан несколько раз:
shphp artisan foo --option=bar --option=baz
Режим PHPVALUE_NONE
указывает, что ключ является простым переключателем:
shphp artisan foo --option
Чтение ввода
Во время выполнения команды вам, конечно, потребуется доступ к параметрам и ключам, которые были переданы ей на вход. Для этого вы можете использовать методы PHPargument()
и PHPoption()
.
$value = $this->argument('name');
$arguments = $this->argument();
$value = $this->option('name');
$options = $this->option();
Вывод
Для вывода сообщений вы можете использовать методы PHPinfo()
, PHPcomment()
, PHPquestion()
и PHPerror()
. Каждый из них будет использовать подходящие цвета ANSI при отображении текста.
$this->info('Показать это на экране');
$this->error('Что-то пошло не так!');
Запрос ввода
Вы можете также использовать методы PHPask()
и PHPconfirm()
для получение ввода от пользователя.
$name = $this->ask('Как вас зовут?');
$password = $this->secret('Какой пароль?');
if ($this->confirm('Вы хотите продолжить (да/нет)?')) {
//
}
Вы можете также передать значение по умолчанию в метод PHPconfirm()
, которое должно быть либо true, либо false:
$this->confirm($question, true);
Регистрация команд
Как только ваша команда написана вам нужно зарегистрировать её в Artisan, чтобы она стала доступна для использования. Это обычно делается в файле app/start/artisan.php. Внутри него вы можете использовать метод PHPArtisan::add()
для регистрации команд:
Artisan::add(new CustomCommand);
Регистрация команды, находящейся в IoC
Если ваша команда зарегистрирована внутри контейнера IoC, то вы можете использовать метод PHPArtisan::resolve()
, чтобы сделать её доступной для Artisan:
Artisan::resolve('binding.name');
добавлено в 4.1 ()
Регистрация команд в поставщике услуг
Если вам необходимо зарегистрировать команды в поставщике услуг, вам надо вызвать метод PHPcommands
из метода поставщика PHPboot
, передав IoC-контейнер для привязки к команде:
public function boot()
{
$this->commands('command.binding');
}
Вызов других команд
Иногда вам потребуется вызвать другую команду изнутри вашей. Вы можете сделать это методом PHPcall()
.
$this->call('command:name', array('argument' => 'foo', '--option' => 'bar'));