Класс Command
Класс Command - это основа для создания
пользовательских консольных команд в Symfony.
Наследуя свой класс от Command, вы получаете
доступ к методам configure, execute и
interact. В методе configure задаётся имя
команды, описание, аргументы и опции. Метод
execute содержит логику выполнения и возвращает
код завершения. Symfony автоматически регистрирует
команду, если класс помечен атрибутом AsCommand
или зарегистрирован в конфигурации сервисов.
Синтаксис
<?php
use Symfony\Component\Console\Command\Command;
class MyCommand extends Command
{
protected function configure(): void
{
// настройка команды
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
// логика команды
return Command::SUCCESS;
}
}
?>
Пример
Давайте создадим простую команду, которая выводит приветствие:
<?php
namespace App\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
#[AsCommand(name: 'app:hello')]
class HelloCommand extends Command
{
protected function configure(): void
{
$this->setDescription('Выводит приветствие');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$output->writeln('hello');
return Command::SUCCESS;
}
}
?>
Запустим команду в терминале:
php bin/console app:hello
Результат выполнения команды:
hello
Пример
Давайте добавим аргумент name и выведем его
значение:
<?php
namespace App\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
#[AsCommand(name: 'app:hello')]
class HelloCommand extends Command
{
protected function configure(): void
{
$this
->setDescription('Выводит приветствие')
->addArgument('name', InputArgument::REQUIRED, 'Имя пользователя');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$name = $input->getArgument('name');
$output->writeln('hello, ' . $name);
return Command::SUCCESS;
}
}
?>
Запустим команду с аргументом:
php bin/console app:hello user
Результат выполнения команды:
hello, user
Пример
Давайте добавим опцию upper, которая переведёт
вывод в верхний регистр:
<?php
namespace App\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
#[AsCommand(name: 'app:hello')]
class HelloCommand extends Command
{
protected function configure(): void
{
$this
->setDescription('Выводит приветствие')
->addArgument('name', InputArgument::REQUIRED, 'Имя пользователя')
->addOption('upper', null, InputOption::VALUE_NONE, 'Верхний регистр');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$name = $input->getArgument('name');
$message = 'hello, ' . $name;
if ($input->getOption('upper')) {
$message = strtoupper($message);
}
$output->writeln($message);
return Command::SUCCESS;
}
}
?>
Запустим команду с опцией:
php bin/console app:hello user --upper
Результат выполнения команды:
HELLO, USER
Смотрите также
-
метод
configure,
который настраивает имя, описание и аргументы команды -
метод
execute,
который содержит логику выполнения команды -
метод
addArgument,
который добавляет аргумент команды -
метод
addOption,
который добавляет опцию команды