我遇到了一個相當複雜的情況來渲染錯誤頁面 1)蛋糕異常NotFoundException從插件拋出; 2)我想從應用渲染布局,而不是從這個插件;cakephp2:如何設置蛋糕異常的佈局
我試圖設置$ this-> layout ='default';在插件控制器的beforeFilter方法中,但仍呈現插件佈局而不是應用佈局。
我看着CakeErrorController,但沒有找到設置佈局的位置。
任何想法如何管理?
我遇到了一個相當複雜的情況來渲染錯誤頁面 1)蛋糕異常NotFoundException從插件拋出; 2)我想從應用渲染布局,而不是從這個插件;cakephp2:如何設置蛋糕異常的佈局
我試圖設置$ this-> layout ='default';在插件控制器的beforeFilter方法中,但仍呈現插件佈局而不是應用佈局。
我看着CakeErrorController,但沒有找到設置佈局的位置。
任何想法如何管理?
我不確定這是否適用於您,但這是我所做的。我(在我的AppController)設置在__construct()
功能:
function __construct() {
parent::__construct();
if ($this->name == 'CakeError') {
$this->layout = 'default';
$this->constructClasses();
$this->beforeFilter();
$this->beforeRender();
}
}
同樣,你的方法可能會有所不同,但是這是我實現它。
此外,您可以在定義的錯誤處理程序中使用AppError.php文件進行設置。被警告,我的方法是用於Cake 1.3,所以我不知道Cake2中的AppError文件有多不同。
<?php
class AppError extends ErrorHandler {
function error403($params) {
extract($params, EXTR_OVERWRITE);
if (!isset($url)) {
$url = $this->controller->here;
}
$this->controller->helpers = array_merge($this->controller->helpers, array('Asset.Asset', 'Auth'));
$url = Router::normalize($url);
$this->controller->set(array(
'code' => '403',
'name' => __('Permission Denied', true),
'message' => $message,
'base' => $this->controller->base
));
$this->_outputMessage('error403');
}
}
最後的,可能會工作的方式,是在錯誤視圖文件中設置'$ this-> layout' ='yourlayout'。 –
我有一個類似的問題:http://cakephp.lighthouseapp.com/projects/42648/tickets/3304-exceptions-always-render-default-layout - 好像沒有簡單的解決方案這個。我討厭擴大例外只是爲了切換佈局:) – mark