0

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

4

2 回答 2

3

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

因此,只需使用适当的错误代码从您的 execute() 方法返回,例如return 42;.

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

于 2019-11-07T09:43:00.897 回答
2

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

于 2019-11-06T13:36:32.543 回答