我的应用程序在Symfony任务中运行大量批处理,我希望收到有关所有PHP错误和未捕获异常的通知。
所以我尝试了sfErrorNotifierPlugin,它在Web上下文中很有用(从浏览器访问应用程序);问题是我不能让它在我的symfony任务上运行。
有没有办法让它在任务中运作?
答案 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)
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;
}
}
这解决了这个问题。