Класс Command
Класс Command является базовым для всех консольных команд в Laravel. Он предоставляет удобный интерфейс для создания пользовательских команд, которые могут быть выполнены через Artisan CLI. Основные компоненты команды - это свойства signature для определения имени и аргументов, description для описания команды и метод handle, где содержится основная логика выполнения. Первым параметром в сигнатуре передаётся имя команды, затем определяются аргументы и опции, а в методе handle реализуется логика работы.
Создание команды
Для создания новой консольной команды используется Artisan-команда make:command. Она генерирует класс команды в директории app/Console/Commands. Вот пример создания команды с именем SendEmails:
<?php
php artisan make:command SendEmails
?>
Результат выполнения команды:
"Console command created successfully."
Синтаксис
<?php
class CommandName extends Command
{
protected $signature = 'command:name {argument} {--option=}';
protected $description = 'Command description';
public function handle()
{
// Logic implementation
}
}
?>
Пример
Давайте создадим команду, которая выводит приветствие для переданного имени пользователя:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class GreetUser extends Command
{
protected $signature = 'greet:user {name}';
protected $description = 'Greet a user by name';
public function handle()
{
$name = $this->argument('name');
$this->info("Hello, $name! Welcome to Laravel.");
}
}
?>
Результат выполнения команды:
"Hello, John! Welcome to Laravel."
Аргументы и опции
Команды могут принимать как обязательные аргументы, так и опции. Аргументы указываются в фигурных скобках, а опции с префиксом --. Например:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class ProcessData extends Command
{
protected $signature = 'process:data
{type : Type of data to process}
{--limit=100 : Number of records to process}
{--force : Force processing without confirmation}';
protected $description = 'Process data with specified parameters';
public function handle()
{
$type = $this->argument('type');
$limit = $this->option('limit');
$force = $this->option('force');
if (!$force && !$this->confirm('Do you want to proceed?')) {
return;
}
$this->info("Processing $type with limit $limit...");
}
}
?>
Результат выполнения команды с опциями:
"Processing users with limit 50..."
Интерактивный ввод
Класс Command предоставляет методы для интерактивного взаимодействия с пользователем. Метод ask запрашивает строку, choice предоставляет выбор из списка, а confirm запрашивает подтверждение:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class InteractiveCommand extends Command
{
protected $signature = 'interactive:example';
protected $description = 'Demonstrate interactive input methods';
public function handle()
{
$name = $this->ask('Enter your name');
$role = $this->choice('Select your role', ['admin', 'user', 'guest']);
$confirmed = $this->confirm('Is this correct?');
$this->info("Name: $name, Role: $role, Confirmed: ".($confirmed ? 'yes' : 'no'));
}
}
?>
Результат выполнения команды:
"Name: Alice, Role: admin, Confirmed: yes"
Смотрите также
-
команда
make:command,
которая генерирует новый класс консольной команды -
метод
handle,
который содержит основную логику выполнения команды -
атрибут
signature,
который определяет имя и параметры команды -
метод
info,
который выводит информационное сообщение в консоль