提前退出 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,在您的示例中(输入文件不可读),例外情况也可能就足够了。
我将 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,在您的示例中(输入文件不可读),例外情况也可能就足够了。