我想爲頁面找不到404頁面的不同佈局。我怎樣才能爲該頁面設置不同的佈局?Cakephp - 如何讓錯誤頁面有自己的佈局?
回答
從IRC莎凡特幫了我和他在app_controller使用beforeRender(){}
建議
// Before Render
function beforeRender() {
if($this->name == 'CakeError') {
//$this->layout = 'error';
}
}
CakeError是錯誤的統稱:d
我知道這個簡單的方法是在你的AppController
創建這個函數:但是
function appError($method, $messages)
{
}
那麼你可以做任何你想要的錯誤,顯示它你喜歡,或不顯示它在所有,發送電子郵件等。(我不知道這方法,如果仍然有效。)
也有在您的應用程序根創建app_error.php
的選項,在它class AppError extends ErrorHandler
,它使您能夠覆蓋各種錯誤。但我還沒有這樣做,所以我不能告訴你更多關於它的信息。
請參閱cake/libs/error.php和cake/libs/object.php,當然還有The Book瞭解更多信息。忘記提及,一旦你發現錯誤,沒有什麼能夠阻止你 - 例如 - 將錯誤存儲在會話中,重定向到你的「錯誤處理控制器」,然後顯示在你的控制器中你要。
感謝很多文件,並設置佈局:d – 2010-10-10 13:04:00
更好地在您的應用程序創建一個error.php文件文件夾
class AppError extends ErrorHandler {
function error404($params) {
$this->controller->layout = 'error';
parent::error404($params);
}
}
這樣就可以避免在每個頁面如果測試渲染學者解決方案引入了
在CakePHP 2.2.2,我改變了ExceptionRenderer在core.php中與我自己的,就像這樣:
應用程序/配置/ core.php中:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'MyExceptionRenderer', // this is ExceptionRenderer by default
'log' => true
));
應用程序/庫/錯誤/ MyExceptionRenderer。 PHP:
App::uses('ExceptionRenderer', 'Error');
class MyExceptionRenderer extends ExceptionRenderer {
protected function _outputMessage($template) {
$this->controller->layout = 'error';
parent::_outputMessage($template);
}
}
無法滿足這個要求,它勝過了我複製每個錯誤視圖並將佈局設置爲頂部「錯誤」的舊方法。 – Matthew 2014-03-08 13:31:29
我的解決方案爲CakePHP的2.3
變化率T他core.php中的ExceptionRenderer使用您自己的渲染器。
應用程序/配置/ core.php中:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'MyExceptionRenderer',
'log' => true
));
應用程序/庫/錯誤/ MyExceptionRenderer.php:
App::uses('ExceptionRenderer', 'Error');
class MyExceptionRenderer extends ExceptionRenderer
{
/**
* Overrided, to always use a bare controller.
*
* @param Exception $exception The exception to get a controller for.
* @return Controller
*/
protected function _getController($exception) {
if (!$request = Router::getRequest(true)) {
$request = new CakeRequest();
}
$response = new CakeResponse(array('charset' => Configure::read('App.encoding')));
$controller = new Controller($request, $response);
$controller->viewPath = 'Errors';
$controller->layout = 'error';
return $controller;
}
}
這種方法的優點是,它保證了從AppController中拋出的異常渲染異常時不會導致無限循環。每次強制執行異常消息的基本呈現。
- 1. 如何讓用戶定義自己的頁面佈局?
- 2. CakePHP的自定義閃佈局錯誤
- 3. 如何發佈自己的Facebook頁面
- 4. CakePHP Plugin的自定義錯誤頁面
- 5. CakePHP 2.1中所有錯誤的自定義佈局
- 6. 如何自己的頁面
- 7. 如何更改modules.config中配置的錯誤頁面的佈局?
- 8. 如何擁有靜態頁面佈局
- 9. CakePHP - 錯誤頁面列表
- 10. CakePHP表單驗證錯誤佈局
- 11. 頁面佈局
- 12. Cakephp插件佈局應用於所有頁面
- 13. 是否可以在錯誤頁面中顯示默認佈局?
- 14. 自動佈局錯誤
- 15. 如何以編程方式發佈到自己的Facebook頁面?
- 16. 如何爲ASP.NET MVC3創建全局自定義錯誤頁面?
- 17. 沒有自定義404錯誤頁面
- 18. Rails 3 - 如何讓自己的錯誤處理程序
- 19. cakephp頁面上的錯誤503
- 20. {jpm}如何將任何頁面替換爲自己的頁面?
- 21. wiki自定義頁面佈局freez保存,結帳和頁面佈局選項?
- 22. aspx頁面佈局
- 23. 像頁面佈局
- 24. 沒有index.php的CakePHP首頁有錯誤
- 25. 如何在Octopress中包含自定義html頁面的頁面佈局
- 26. Hybris自定義佈局頁面
- 27. Inno Setup:Ready頁面自定義佈局
- 28. 畫布頁面URL錯誤
- 29. 如何重新定義自定義頁面的佈局
- 30. 帶自己的佈局的CheckBoxPreference
這種方法不再使用CakePHP 2.x的有效我不知道現在該怎麼做......大聲笑 – 2012-06-29 19:15:01
我可以證實這種方法適用於Cake 2.2.1。 – bancer 2012-09-13 09:14:33
我沒有在Cake 2.2.1中確認。我調試了beforeRender中的$ this-> layout,我得到了預期的'public_layout',但它仍然以default.ctp呈現。 DEBUG被設置爲0. – 2012-10-23 11:20:04