Содержание
Laravel имеет интерфейс командной строки с именем Artisan. Этот интерфейс предоставляет разработчику множество полезных команд для ускорения процесса разработки.
Кроме того, вы можете расширить ремесленник своими собственными командами, чтобы создавать и автоматизировать уникальные задачи вашего проекта Laravel. Команды обычно хранятся в app/Console/Commands
Однако вы можете выбрать собственное место хранения, если Composer может загружать ваши команды.
В этой статье вы узнаете, как легко создать собственную команду для ремесленника в Laravel 5.3.
Создать и зарегистрировать команду
Laravel поможет вам сделать все проще, он уже интегрировал make:console NewClassName
Команда для ускорения процесса разработки. Эта команда ожидает в качестве первого аргумента имя класса и, необязательно, параметр команды, чтобы указать непосредственно имя команды без изменения класса.
Чтобы создать новую консольную команду с именем quiz:start
с именем класса QuizStart выполните в консоли следующую команду:
php artisan make:command QuizStart --command=quiz:start
Замечания: если вы не хотите использовать консоль, скопируйте пример класса в «Структуру команды» и измените имя файла и класса по своему усмотрению. Помните также, что в предыдущих версиях Laravel < 5.2, instead of make:console
,
Это должно создать класс QuizStart в /app/console/commands
каталог с App\Console\Commands
Пространство имен.
Наконец, наша команда не зарегистрирована, поэтому нам нужно добавить ее в нашу /app/console/Kernel.php
файл в $commands
массив (укажите путь к классу и имя):
protected $commands = [
// Commands\Inspire::class,
'App\Console\Commands\QuizStart'
];
использование php artisan cache:clear
очистить кеш и попытаться выполнить команду с предыдущим именем:
php artisan quiz:start
Как и ожидалось, эта команда ничего не должна делать, теперь вам нужно только научиться работать с ней.
Структура команды
Чтобы настроить имя вашей команды и описание, измените имя непосредственно в классе, и вся логика команды будет сохранена в функции handle.
Распечатать текст
Чтобы отправить вывод на консоль, вы можете выбрать один из следующих методов: строка, информация, комментарий, вопрос и методы ошибки. Каждый из этих методов будет использовать соответствующие цвета ANSI для своих целей.
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->line("Some text");
$this->info("Hey, watch this !");
$this->comment("Just a comment passing by");
$this->question("Why did you do that?");
$this->error("Ops, that should not happen.");
}
Ввод команды: аргументы и опции
Ожидайте аргументы и параметры в команде
Если вы не установите, какие параметры или опции ожидают вашу функцию, ваша команда не сможет работать, даже если вы выполните ее с параметрами.
В Laravel в свойстве signature (имя команды) мы определяем наши аргументы и параметры прямо в строке (в отличие от более старых версий Laravel):
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'quiz:start {user} {age} {--difficulty=} {--istest=}';
Аргументы регистрируются в нашем комманде с простым синтаксисом {argumentName}
и варианты как {--optionName=}
, так что теперь нам не нужно создавать опции get и методы arguments в нашем классе.
Его синтаксис очень прост для понимания, в основном это все способы использования аргументов и опций в нашей команде (если вы хотите больше подробностей, пожалуйста, прочитайте документы):
- аргументация:
quiz:start
{argument}
, - Необязательный аргумент (обратите внимание на знак вопроса рядом с именем аргумента):
quiz:start
{argument?}
, - Аргумент со значением по умолчанию:
quiz:start {argument=defaultValue}
, - Булева опция:
quiz:start --myOption
, - Вариант со значением:
quiz:start --myOption=
, - Вариант со значением и значением по умолчанию:
quiz:start --myOption=12
,
Получить значения аргументов и опций
Если вашей команде нужны некоторые значения для работы (параметры), вам нужно получить доступ к этим значениям, чтобы использовать их в вашей команде. Для решения этой задачи вы можете использовать методы аргумента и опции:
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
// Get single Parameters
$username = $this->argument('user');
$difficulty = $this->option('difficulty');
// Get all
$arguments = $this->arguments();
$options = $this->options();
// Stop execution and ask a question
$answer = $this->ask('What is your name?');
// Ask for sensitive information
$password = $this->secret('What is the password?');
// Choices
$name = $this->choice('What is your name?', ['Taylor', 'Dayle'], $default);
// Confirmation
if ($this->confirm('Is '.$name.' correct, do you wish to continue? [y|N]')) {
//
}
}
пример
Следующая функция создаст в консоли интерактивный тест, и вам нужно ответить на все из них. После того, как тест будет заполнен, он покажет ответы, которые вы набрали.
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$difficulty = $this->option('difficulty');
if(!$difficulty){
$difficulty = 'easy';
}
$this->line('Welcome '.$this->argument('user').", starting test in difficulty : ". $difficulty);
$questions = [
'easy' => [
'How old are you ?', "What is the name of your mother?",
'Do you have 3 parents ?','Do you like Javascript?',
'Do you know what is a JS promise?'
],
'hard' => [
'Why the sky is blue?', "Can a kangaroo jump higher than a house?",
'Do you think i am a bad father?','why the dinosaurs disappeared?',
"why don't whales have gills?"
]
];
$questionsToAsk = $questions[$difficulty];
$answers = [];
foreach($questionsToAsk as $question){
$answer = $this->ask($question);
array_push($answers,$answer);
}
$this->info("Thanks for do the quiz in the console, your answers : ");
for($i = 0;$i line(($i + 1).') '. $answers[$i]);
}
}
Выполнение команды от контроллера или маршрута
Очевидно, как мы использовали просить метод, он не должен работать, однако для других методов вы сможете выполнить команду, используя:
$exitCode = Artisan::call('quiz:start', [
'user' => 'Carlos', '--difficulty' => 'hard'
]);
Если вам нужна дополнительная информация о ремесленнике, вы можете прочитать документацию здесь. Повеселись !