symfony任务的sfErrorNotifierPlugin

时间:2011-05-11 09:43:44

标签: php symfony1 symfony-plugins

我的应用程序在Symfony任务中运行大量批处理,我希望收到有关所有PHP错误和未捕获异常的通知。

所以我尝试了sfErrorNotifierPlugin,它在Web上下文中很有用(从浏览器访问应用程序);问题是我不能让它在我的symfony任务上运行。

有没有办法让它在任务中运作?

3 个答案:

答案 0 :(得分:3)

sfTask没有像Web界面那样的异常处理,但您可以解决它:最终抛出的异常传递给sfErrorNotifier::notifyException

将任务的execute方法包装在一个大的try-catch块中:

public function execute($arguments = array(), $options = array())
{
  try {
    //your code here
  }
  catch(Exception $e) {
    sfErrorNotifier::notifyException($e); //call the notifier
    throw $e; //rethrow to stop execution and to avoid problems in some special cases
  }
}

请记住,它需要一个正确运行的应用程序参数(使用app.yml中的设置)。

答案 1 :(得分:3)

ProjectConfiguration.class.php中的

public function setup()
  {
    if ('cli' == php_sapi_name()) $this->disablePlugins('sfErrorNotifierPlugin');
  }

答案 2 :(得分:0)

感谢您的帮助@Maerlyn,我的解决方案与您的解决方案没什么不同。

我解决了以这种方式覆盖我的任务上的doRun方法的问题:

protected function doRun(sfCommandManager $commandManager, $options)
{
    try
    {
      return parent::doRun($commandManager, $options);

    }
    catch (Exception $e)
    {
      $this->dispatcher->notifyUntil(new sfEvent($e, 'application.throw_exception'));
      throw $e;
    }
  }

这解决了这个问题。