2011-05-11 47 views
1

我的應用程序在Symfony任務中運行了大量的批處理,並且我希望得到有關所有PHP錯誤和未捕獲異常的通知。因此我嘗試了sfErrorNotifierPlugin,它在web上下文(從瀏覽器訪問應用程序)中工作得很好;問題是我無法使我的symfony任務成爲可能。symfony任務中的sfErrorNotifierPlugin

有什麼辦法讓它在任務中工作嗎?

回答

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; 
    } 
    } 

這解決了問題。

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使用的設置)。

+0

這是很酷的。是否還有其他的sfNotifier允許您閱讀打印到控制檯的消息,以便它們可以顯示在Web應用程序中?這實際上可以是http://stackoverflow.com/questions/6085939/display-output-from-a-symfony-task-on-a-模板的答案 – Prasad 2011-05-27 08:06:58

3

在ProjectConfiguration.class.php

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