Атрибут signature
Атрибут signature класса Command применяется для задания имени команды, а также определения доступных аргументов и опций.
Первый аргумент - это строка сигнатуры, которая определяет способ вызова команды из консоли.
Второй аргумент - это описание команды, которое будет отображаться в списке доступных команд.
Синтаксис
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class MyCommand extends Command
{
protected $signature = 'имя:команды {аргумент} {--опция=значение}';
protected $description = 'Описание команды';
public function handle()
{
// Логика команды
}
}
?>
В атрибуте signature можно определить обязательные и необязательные аргументы, а также опции с значениями или без.
Аргументы определяются в фигурных скобках, опции - в квадратных.
Пример
Давайте создадим команду, которая принимает имя пользователя в качестве аргумента и выводит приветствие:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class GreetUserCommand extends Command
{
protected $signature = 'user:greet {name}';
protected $description = 'Приветствует пользователя';
public function handle()
{
$name = $this->argument('name');
$this->info("Привет, $name!");
}
}
?>
Запустим созданную команду из консоли:
php artisan user:greet Alex
Результат выполнения команды:
"Привет, Alex!"
Пример
Добавим опцию для команды, которая позволит выбирать язык приветствия:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class GreetLanguageCommand extends Command
{
protected $signature = 'user:greet-lang {name} {--lang=en : Язык приветствия}';
protected $description = 'Приветствует пользователя на указанном языке';
public function handle()
{
$name = $this->argument('name');
$lang = $this->option('lang');
$greetings = [
'en' => "Hello, $name!",
'ru' => "Привет, $name!",
'es' => "¡Hola, $name!",
];
$message = $greetings[$lang] ?? $greetings['en'];
$this->info($message);
}
}
?>
Запустим команду с указанием опции:
php artisan user:greet-lang Maria --lang=es
Результат выполнения команды:
"¡Hola, Maria!"
Пример
Использование необязательного аргумента и булевой опции:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class NotifyCommand extends Command
{
protected $signature = 'notify {message} {--urgent : Отправить срочное уведомление}';
protected $description = 'Отправляет уведомление';
public function handle()
{
$message = $this->argument('message');
$isUrgent = $this->option('urgent');
if ($isUrgent) {
$this->warn("СРОЧНО: $message");
} else {
$this->info("Уведомление: $message");
}
}
}
?>
Запустим команду без опции:
php artisan notify "Тестовое сообщение"
Результат выполнения команды:
"Уведомление: Тестовое сообщение"
Запустим команду с опцией --urgent:
php artisan notify "Важное сообщение" --urgent
Результат выполнения команды:
"СРОЧНО: Важное сообщение"
Смотрите также
-
атрибут
description,
который задает описание команды -
метод
argument,
который получает значение аргумента -
метод
option,
который получает значение опции -
метод
info,
который выводит информационное сообщение в консоль