1

我嘗試使用「set_exception_handler」函數來捕獲我的ActionController異常。zend框架2在ActionController set_exception_handler

在任何視圖中,例如index.phtml這段代碼工作正常,視圖顯示Helloooo。

<?php 
    namespace App; 
    echo $this->doctype(); 

    class Fun { 
     static function exception_handler(\Exception $ex){ 
      echo "Heloooo"; 
     } 
     function method(){ 
      set_exception_handler('App\Fun::exception_handler'); 
      throw new \Exception('One Exception'); 
     } 
    } 
    $f = new Fun(); 
    $f->method(); 

我不明白,因爲ActionController.php,set_exception_handler()中的相同代碼沒有捕獲到異常。 在這種情況下,該視圖顯示帶有「One Exception」消息的zend異常模板。

順便說一句,異常堆棧不顯示任何警告消息,然後我假設set_exception_handler()參數是好的。

namespace App\Controller; 
    use Zend\....... //All namespaces used 

    class Fun { 
     static function exception_handler(\Exception $ex){ 
      echo "Helloooo"; 
     } 
     function method(){ 
      set_exception_handler('App\Controller\Fun::exception_handler'); 
      throw new \Exception('One Exception'); 
     } 
    } 
    $f = new Fun(); 
    $f->method(); 

    class MainController extends AbstractActionController { 
     //The Controller Code (in this test it doesn't execute). 
    } 

我認爲Zend Framework使用任何技術來捕獲其他級別的控制器異常。 請問有人有什麼想法嗎?

+0

第一個例子是有缺陷的,所規定的異常處理程序的命名空間是錯誤的 - 你提供「SecureDraw \樂:: exception_handler」時,它應該是「應用程序\樂趣:: exception_handler」。在ZF2中,默認情況下我們不會註冊異常處理程序;我們只需在相關的偵聽器中有一個try/catch塊。這可能會阻止您的異常處理程序,因爲技術上處理異常。 – weierophinney

+0

這是一個寫入錯誤,現在已經解決了。 – josepmra

+0

我遇到同樣的問題。我試圖在我的抽象控制器的onDispatch方法中捕獲我的異常,所以我沒有重複每一個我的動作,都圍繞着db語句嘗試/捕獲,只是返回相同的東西。現在@josepmra糾正了他的例子中的錯誤,你能否提供更多的見解@weierophinney? – cr125rider

回答