2012-04-21 45 views
1

如何在CakePHP 2.1中爲我的錯誤使用自定義佈局?CakePHP 2.1中所有錯誤的自定義佈局

我查看了文檔,看到了各種提到的自定義處理程序等,但沒有選擇使用的佈局......任何想法?

在類似1.3之前的CakePHP版本中,您可以創建一個AppError類,但這將不再起作用,因爲現在CakeError已被折舊,並且根據新應用程序的文檔對此類操作進行了嘲弄。

在core.php中

回答

1

將我的錯誤處理程序和異常處理程序來定製一個:

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/(或插件或沒有)

例如:https://github.com/dereuromark/tools/tree/2.0/Lib/Error

+0

所有我想要做的就是改變佈局O_o我真的需要寫所有的代碼嗎? – Cameron 2012-04-21 10:28:18

+0

哦,我以爲你想做更多..嗯,只有佈局可能有更簡單的解決方案 - 例如在AppController beforeRender中(檢查控制器==錯誤)。 – mark 2012-04-21 10:50:57

+0

你能舉一個例子,因爲我不明白。謝謝。 – Cameron 2012-04-21 11:01:28

3

您可以beforeRender()函數如下改變佈局: -

public function beforeRender(){ 
    if($this->name == 'CakeError'){ 
     $this->layout = 'error'; 
    }   
} 
2

這就是我在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); 
    } 

} 
0

只要寫

$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 問候