如何防止 Symfony 在收到警告或通知时退出整个程序

How to prevent Symfony from quitting the whole program when getting a warning or notice

在 Symfony 中,当我们 运行 一个命令时,如果有任何通知或警告,Symfony 会显示一个红色的大信息并退出整个程序。

我希望将错误发送到日志中,但我不希望整个程序退出。谁能告诉我如何实现这一目标。谢谢。

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class NotQuitWithWarningOrNoticeCommand extends ContainerAwareCommand
{

protected function configure()
{
    $this
        ->setName('try:nored')
        ->setDescription('Avoid to show big red message')
        ->addArgument('type');
}

protected function execute(InputInterface $input, OutputInterface $output)
{
    $type = $input->getArgument('type');
    if ($type == 'warning' || !$type) {
        trigger_error("a warning", E_USER_WARNING);
    }
    if ($type == 'notice' || !$type) {
        trigger_error("a notice", E_USER_NOTICE);
    }
    echo "Hi there!\n";
}

} 

(这里的代码只是为了重现问题。得到警告或通知是我的场景。)

不幸的是,没有办法捕获这些错误,因为它们无一例外。

但是,由于它们是错误,您的第一个动作应该是尝试修复这些错误。

但有时,这些错误来自您从第三方库调用的代码,而您无法影响这些代码。在这种情况下,您可以只在触发错误的函数调用前加上“@”前缀。这将抑制这些消息。

或者,您可能需要检查 cli 的 error_reporting 和 display_error 设置 php.ini:

http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors http://php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

希望对您有所帮助。

程序退出的原因是因为 Symfony 将警告提升为异常,而您的代码中没有任何内容捕获它。您可以通过在调用命令时添加命令行选项 --no-debug 来防止此行为。