git 5af28da3ac17a272f3390fbc08582fbd1708b42d
В дополнение к командам, предоставляемых 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 CLI, чтобы она была доступна для использования.
Это делается в файле app/Console/Kernel.php
, в свойстве commands
:
protected $commands = [
'App\Console\Commands\Inspire',
];
Для регистрации вашей команды просто добавьте её в этот массив. Когда Artisan загрузится, все команды из этого массива будут автоматически определены с помощь IoC-контейнера и зарегистрированы.