Ранний выход из Symfony Console execute ()? - PullRequest
0 голосов
/ 06 ноября 2019

Я использую Sympfony Console в качестве отдельного компонента.

Допустим, у меня есть команда, определенная следующим образом:

class Box extends Command
{
    public function __construct() {
        // removed for simplicity of this example
    }
    protected function configure() {
        // removed for simplicity of this example
    }
    protected function execute(InputInterface $input, OutputInterface $output) {
        if (!$data=\file_get_contents($input->getOption('inputfile'))) { return false;}
        // rest of code removed for simplicity of this example
    }
}

Очевидно, что это, скорее всего, не правильно для использованияreturn false; Так, как правильно это сделать, я не могу найти ссылку или пример в документации? Ближайшая вещь, которую я могу найти, это ссылка на ConsoleEvents::TERMINATE, но использование событий для достижения моей цели кажется немного излишним?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Для неудачного выполнения команды execute () должен вернуть ненулевое целое число в качестве кода ошибки. Подробности смотрите в базовом классе (Symfony \ Component \ Console \ Command \ Command).

Так что просто вернитесь из метода execute () с соответствующим кодом ошибки, например return 42;.

Другая возможность - создать исключение, которое автоматически перехватывается и форматируется компонентом консоли, а также вызывает ненулевой код завершения команды. Используется ли регулярный возврат или исключение, зависит от ситуации. Если это нормальная ситуация (например, неправильный ввод данных пользователем), предпочтительнее регулярный возврат, в вашем примере (входной файл не читается) также может быть достаточно исключения.

2 голосов
/ 06 ноября 2019

Я бы сказал, просто return, не знаю, почему вы хотите сделать что-то необычное, чтобы просто завершить команду. Вы можете добавить строку вывода перед возвратом, чтобы рассказать, что происходит в кли ...

...