从PHP / Symfony中的异常中恢复

时间:2015-04-02 21:29:49

标签: php symfony exception-handling daemon

我已经使用Symfony2 a simple command-line tool调用了一个服务,该服务在出错时会抛出UniverseException。有点像这样;

# /src/AppBundle/Command/UniverseCommand.php
class UniverseCommand extends ContainerAwareCommand
{
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        if ( 1 == 2 )
            throw new UniverseException('Strange things are afoot');
    }
}

我还添加了CommandExceptionListener,如果抛出MyAppBundleException,我可以恢复我的应用程序。

# /src/AppBundle/EventListener/CommandExceptionListener.php
class CommandExceptionListener
{
    public function onConsoleException(ConsoleExceptionEvent $event)
    {
        if ($exception instanceof UniverseException) {
            // Reboot the universe
            // Continue existence..?
        }
    }
}

效果很好!

但现在我想使用daemonizable-command捆绑包将命令作为守护程序运行。如果我的服务抛出异常,则执行停止,这会产生一个可怕的守护进程!

我的应用已处理此类异常。有没有办法从它恢复并允许我的守护进程继续执行?

修改 我尝试在命令中添加try / catch,就像这样..

# /src/AppBundle/Command/UniverseCommand.php
class UniverseCommand extends ContainerAwareCommand
{
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        try{
            if ( 1 == 2 )
                throw new UniverseException('Strange things are afoot');
        }catch(\Exception $e){
            echo 'The universe behaved badly but I rebooted it.';
        }
    }
}

它捕获异常并且守护进程继续!但是现在,当然,我的事件监听器并没有被解雇,而且例外处理不正确。

0 个答案:

没有答案