Константа INVALID
Константа INVALID класса Command представляет
собой целочисленное значение, которое возвращается
из метода execute. Она сигнализирует
фреймворку о том, что команда не смогла выполнить
свою задачу из-за некорректных входных данных
или ошибки валидации. Значение этой константы
равно 2.
Возврат данного кода обычно сопровождается
выводом сообщения об ошибке в консоль, чтобы
пользователь понял причину сбоя. Это отличается
от константы FAILURE, которая означает
общую ошибку выполнения, и от SUCCESS,
означающей успешное завершение.
Синтаксис
Command::INVALID
Пример
Давайте создадим команду, которая проверяет
наличие обязательного аргумента. Если аргумент
не передан, команда возвращает константу
INVALID:
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
class CheckUserCommand extends Command
{
protected static $defaultName = 'app:check-user';
protected function configure(): void
{
$this
->setDescription('Checks user data.')
->addArgument('name', InputArgument::OPTIONAL, 'User name');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$name = $input->getArgument('name');
if (empty($name)) {
$io->error('The name argument is required.');
return Command::INVALID;
}
$io->success('User ' . $name . ' is valid.');
return Command::SUCCESS;
}
}
?>
Запустим команду без аргументов:
php bin/console app:check-user
Результат выполнения кода:
[ERROR] The name argument is required.
Пример
Давайте добавим проверку на допустимые символы
в имени пользователя. Если имя содержит цифры,
команда также вернёт INVALID:
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
class CheckUserCommand extends Command
{
protected static $defaultName = 'app:check-user';
protected function configure(): void
{
$this
->setDescription('Checks user data.')
->addArgument('name', InputArgument::OPTIONAL, 'User name');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$name = $input->getArgument('name');
if (empty($name)) {
$io->error('The name argument is required.');
return Command::INVALID;
}
if (preg_match('/[0-9]/', $name)) {
$io->error('The name must not contain digits.');
return Command::INVALID;
}
$io->success('User ' . $name . ' is valid.');
return Command::SUCCESS;
}
}
?>
Запустим команду с именем, содержащим цифры:
php bin/console app:check-user user123
Результат выполнения кода:
[ERROR] The name must not contain digits.