我嘗試使用「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使用任何技術來捕獲其他級別的控制器異常。 請問有人有什麼想法嗎?
第一個例子是有缺陷的,所規定的異常處理程序的命名空間是錯誤的 - 你提供「SecureDraw \樂:: exception_handler」時,它應該是「應用程序\樂趣:: exception_handler」。在ZF2中,默認情況下我們不會註冊異常處理程序;我們只需在相關的偵聽器中有一個try/catch塊。這可能會阻止您的異常處理程序,因爲技術上處理異常。 – weierophinney
這是一個寫入錯誤,現在已經解決了。 – josepmra
我遇到同樣的問題。我試圖在我的抽象控制器的onDispatch方法中捕獲我的異常,所以我沒有重複每一個我的動作,都圍繞着db語句嘗試/捕獲,只是返回相同的東西。現在@josepmra糾正了他的例子中的錯誤,你能否提供更多的見解@weierophinney? – cr125rider