【问题标题】:Early exit from Symfony Console execute()?提前退出 Symfony 控制台执行()?
【发布时间】:2019-11-06 13:26:02
【问题描述】:

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

【问题讨论】:

  • 只是返回,不需要我认为的布尔值

标签: php symfony symfony-console


【解决方案1】:

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

所以只需从您的 execute() 方法返回并带有适当的错误代码,例如return 42;.

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

【讨论】:

  • 感谢有关异常的提示!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2012-06-13
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多