提前退出 Symfony 控制台 execute()?

Early exit from Symfony Console execute()?

我将 Sympfony 控制台用作独立组件。

假设我有一个定义如下的命令:

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 的引用,但使用事件来实现我的目标似乎有点矫枉过正?

我也想说 return,不知道为什么你想要做额外的花哨的东西来终止命令。您可以在 return 之前添加一个输出行来告诉客户端中发生了什么...

对于不成功的命令执行,execute() 应该return一个非零整数作为错误代码。有关详细信息,请参阅基础 class (Symfony\Component\Console\Command\Command)。

所以只需 return 从您的 execute() 方法中使用适当的错误代码,例如return 42;.

另一种可能是抛出异常,该异常会被控制台组件自动捕获并格式化,并且还会导致命令的非零退出代码。使用常规 return 还是异常取决于情况。如果是正常情况(例如,错误的用户输入),则最好使用常规 return,在您的示例中(输入文件不可读),例外情况也可能就足够了。