學習yaf(五)yaf 異常和錯誤的捕捉


Yaf實現了一套錯誤和異常捕獲機制, 主要是對常見的錯誤處理和異常捕獲方法做了一個簡單抽象, 方便應用組織自己的錯誤統一處理邏輯.

Yaf自身出錯時候, 根據配置可以分別采用拋異常或者觸發錯誤的方式來通知錯誤. 在appliation.dispatcher.throwException(配置文件, 或者通過Yaf_Dispatcher::throwException(true))打開的情況下, Yaf會拋異常, 否則則會觸發錯誤.

那么對應的, 就有倆套錯誤處理方式可供應用選用.

異常模式

application.dispatcher.catchException(配置文件, 或者可通過Yaf_Dispatcher::catchException(true))開啟的情況下, 當Yaf遇到未捕獲異常的時候, 就會把運行權限, 交給當前模塊的Error Controller的Error Action動作, 而異常或作為請求的一個參數, 傳遞給Error Action.

在Error Action中可以通過$request->getRequest()->getParam("exception")獲取當前發生的異常.

[重要] 重要
從Yaf1.0.0.12開始, 也可以通過$request->getException()來獲取當前發生的異常, 而如果Error Action定義了一個名為$exception的參數的話, 也可以直接通過這個參數獲取當前發生的異常.

在配置文件中添加2條配置項

;出錯時候時候拋出異常
application.dispatcher.throwException=1
application.dispatcher.catchException=1

 

新增一個用來捕捉錯誤的Error Controller

<?php
/**
* 當有未捕獲的異常, 則控制流會流到這里
*/
class ErrorController extends Yaf_Controller_Abstract {

/**
* 此時可通過$request->getException()獲取到發生的異常
*/
public function errorAction() {
$exception = $this->getRequest()->getException();
try {
throw $exception;
} catch (Yaf_Exception_LoadFailed $e) {

//

//加載失敗

$this->getView()->assign("code", $exception->getCode());
$this->getView()->assign("message", $exception->getMessage());
} catch (Yaf_Exception $e) {

//其他錯誤
$this->getView()->assign("code", $exception->getCode());
$this->getView()->assign("message", $exception->getMessage());
}
}
}

新增視圖error\error.phtml 

<html>
<head>
<title>錯誤捕捉</title>
</head>
<body>
<?php echo '錯誤代碼:'.$code;?>
<?php echo '錯誤代碼說明:'.$message;?>
</body>
</html>

訪問錯誤請求 http://127.0.07/a (注意之前定義的路由規則 Yaf_Route_Regex PS:后綴只能帶數字)

報錯:錯誤代碼:516 錯誤代碼說明:Failed opening controller script /usr/local/www/php/server/yaf/application/controllers/A.php: No such file or directory

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM