如何在CakePHP 2.1中爲我的錯誤使用自定義佈局?CakePHP 2.1中所有錯誤的自定義佈局
我查看了文檔,看到了各種提到的自定義處理程序等,但沒有選擇使用的佈局......任何想法?
在類似1.3之前的CakePHP版本中,您可以創建一個AppError類,但這將不再起作用,因爲現在CakeError已被折舊,並且根據新應用程序的文檔對此類操作進行了嘲弄。
在core.php中如何在CakePHP 2.1中爲我的錯誤使用自定義佈局?CakePHP 2.1中所有錯誤的自定義佈局
我查看了文檔,看到了各種提到的自定義處理程序等,但沒有選擇使用的佈局......任何想法?
在類似1.3之前的CakePHP版本中,您可以創建一個AppError類,但這將不再起作用,因爲現在CakeError已被折舊,並且根據新應用程序的文檔對此類操作進行了嘲弄。
在core.php中將我的錯誤處理程序和異常處理程序來定製一個:
App::uses('MyErrorHandler', 'Tools.Error');
Configure::write('Error', array(
'handler' => 'MyErrorHandler::handleError',
'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,
'trace' => true
));
Configure::write('Exception', array(
'handler' => 'MyErrorHandler::handleException',
'renderer' => 'Tools.MyExceptionRenderer',
'log' => true
));
,那麼你應該把你的班Lib/Error/
(或插件或沒有)
您可以beforeRender()函數如下改變佈局: -
public function beforeRender(){
if($this->name == 'CakeError'){
$this->layout = 'error';
}
}
這就是我在CakePHP 2.2.2中所做的:我使用MyExceptionRenderer改變了core.php中的異常渲染器並擴展了ExceptionRenderer,覆蓋了父類方法中的一個。發行版已經包含了文件app/View/Layouts/error.ctp,所以我只是編輯了一下。
我也注意到CakeError已被棄用,所以這爲我工作。
應用程序/配置/ core.php中:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'MyExceptionRenderer',
'log' => true
));
應用程序/庫/錯誤/ MyExceptionRenderer.php:
App::uses('ExceptionRenderer', 'Error');
class MyExceptionRenderer extends ExceptionRenderer {
protected function _outputMessage($template) {
$this->controller->layout = 'error';
parent::_outputMessage($template);
}
}
只要寫
$this->layout = 'my_error'
在error400.ctp和error500.ctp文件
在您查看/錯誤/ 404.ctp查看/錯誤/ 500.ctp
這樣
<?php $this->layout = 'my_error' ?>
<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>
@faferuziel/@fetruzie 問候
所有我想要做的就是改變佈局O_o我真的需要寫所有的代碼嗎? – Cameron 2012-04-21 10:28:18
哦,我以爲你想做更多..嗯,只有佈局可能有更簡單的解決方案 - 例如在AppController beforeRender中(檢查控制器==錯誤)。 – mark 2012-04-21 10:50:57
你能舉一個例子,因爲我不明白。謝謝。 – Cameron 2012-04-21 11:01:28