我的應用程序在Symfony任務中運行了大量的批處理,並且我希望得到有關所有PHP錯誤和未捕獲異常的通知。因此我嘗試了sfErrorNotifierPlugin,它在web上下文(從瀏覽器訪問應用程序)中工作得很好;問題是我無法使我的symfony任務成爲可能。symfony任務中的sfErrorNotifierPlugin
有什麼辦法讓它在任務中工作嗎?
我的應用程序在Symfony任務中運行了大量的批處理,並且我希望得到有關所有PHP錯誤和未捕獲異常的通知。因此我嘗試了sfErrorNotifierPlugin,它在web上下文(從瀏覽器訪問應用程序)中工作得很好;問題是我無法使我的symfony任務成爲可能。symfony任務中的sfErrorNotifierPlugin
有什麼辦法讓它在任務中工作嗎?
感謝您的幫助@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;
}
}
這解決了問題。
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使用的設置)。
在ProjectConfiguration.class.php
public function setup()
{
if ('cli' == php_sapi_name()) $this->disablePlugins('sfErrorNotifierPlugin');
}
這是很酷的。是否還有其他的sfNotifier允許您閱讀打印到控制檯的消息,以便它們可以顯示在Web應用程序中?這實際上可以是http://stackoverflow.com/questions/6085939/display-output-from-a-symfony-task-on-a-模板的答案 – Prasad 2011-05-27 08:06:58