{{TOC}} {{DOCVER 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 04:19:00, 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 05:21:00}} == Введение == В дополнение к ((docs/v4/artisan стандартным командам Artisan)) вы можете также добавлять свои собственные команды для работы с приложением. Вы можете поместить их в папку %%(t)app/commands%%, либо в любое другое место, в котором их сможет найти автозагрузчик в соответствии с вашим файлом %%(t)composer.json%%. == Создание команды == === Создание класса == Для создания новой команды можно использовать команду %%(t)command:make%%, которая создаст заглушку, с которой вы можете начать работать. **Генерация нового класса команды** %%(sh) php artisan command:make FooCommand %% По умолчанию сгенерированные команды помещаются в папку %%(t)app/commands%%, однако вы можете указать произвольное расположение или пространство имён: %%(sh) php artisan command:make FooCommand --path=app/classes --namespace=Classes %% %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 05:21:00) При создании команды может быть использован параметр %%(sh)--command%% для назначения имени команды в терминале: ~%%(sh) php artisan command:make AssignUsers --command=users:assign ~%% %% === Написание команды == Когда вы сгенерировали класс команды, вам нужно заполнить его свойства %%$name%% и %%$description%%, которые используются при отображении вашей команды в списке команд (%%(t)artisan list%%). Метод %%(t)fire%% будет вызван при вызове вашей команды. В него вы можете поместить любую нужную логику. == Параметры и ключи == Методы %%getArguments()%% и %%getOptions()%% служат для определения параметров и ключей, которые ваша команда принимает на вход. Оба эти метода могут возвращать массив команд, которые описываются как массив ключей. При определении %%$arguments%% массив имеет такую форму: %% array($name, $mode, $description, $defaultValue) %% Параметр %%$mode%% может быть объектом %%InputArgument::REQUIRED%% или %%InputArgument::OPTIONAL%%. При определении %%$options%%, массив выглядит так: %% array($name, $shortcut, $mode, $description, $defaultValue) %% %%$mode%% для ключей может быть любым из этих объектов: %%InputOption::VALUE_REQUIRED%%, %%InputOption::VALUE_OPTIONAL%%, %%InputOption::VALUE_IS_ARRAY%%, %%InputOption::VALUE_NONE%%. Режим %%VALUE_IS_ARRAY%% указывает, что ключ может быть передан несколько раз: %%(sh) php artisan foo --option=bar --option=baz %% Режим %%VALUE_NONE%% указывает, что ключ является простым переключателем: %%(sh) 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('Вы хотите продолжить (да/нет)?')) { // } %% Вы можете также передать значение по умолчанию в метод %%confirm()%%, которое должно быть либо **true**, либо **false**: %% $this->confirm($question, true); %% == Регистрация команд == **Регистрация команды Artisan** Как только ваша команда написана вам нужно зарегистрировать её в ((docs/v4/artisan Artisan)), чтобы она стала доступна для использования. Это обычно делается в файле %%(t)app/start/artisan.php%%. Внутри него вы можете использовать метод %%Artisan::add()%% для регистрации команд: %% Artisan::add(new CustomCommand); %% **Регистрация команды, находящейся в IoC** Если ваша команда зарегистрирована внутри ((docs/v4/ioc контейнера IoC)), то вы можете использовать метод %%Artisan::resolve()%%, чтобы сделать её доступной для Artisan: %% Artisan::resolve('binding.name'); %% %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 05:21:00) **Регистрация команд в поставщике услуг** Если вам необходимо зарегистрировать команды в поставщике услуг, вам надо вызвать метод %%commands%% из метода поставщика %%boot%%, передав ((/docs/v4/ioc IoC-контейнер)) для привязки к команде: ~%% public function boot() { $this->commands('command.binding'); } ~%% %% == Вызов других команд == Иногда вам потребуется вызвать другую команду изнутри вашей. Вы можете сделать это методом %%call()%%. %% $this->call('command:name', array('argument' => 'foo', '--option' => 'bar')); %% .(tl_note) В версии 4.0 использовалась точечная запись (%%(t)command.name%%).