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

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

Yaf自身出錯時候, 根據配置能夠分別採用拋異常或者觸發錯誤的方式來通知錯誤. 在appliation.dispatcher.throwException(配置文件, 或者經過Yaf_Dispatcher::throwException(true))打開的狀況下, Yaf會拋異常, 不然則會觸發錯誤.html

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

異常模式

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

在Error Action中能夠經過$request->getRequest()->getParam("exception")獲取當前發生的異常.spa

[重要] 重要
從Yaf1.0.0.12開始, 也能夠經過$request->getException()來獲取當前發生的異常, 而若是Error Action定義了一個名爲$exception的參數的話, 也能夠直接經過這個參數獲取當前發生的異常.

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

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

 

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

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

/**
* 此時可經過$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

相關文章
相關標籤/搜索