是否可以在错误页面中显示默认布局?
Is it possible to show default layout in error pages?
我想从头开始设计我的应用程序样式,所以我创建了一个全新的布局并将其指定为默认布局:
class AppController extends Controller {
public $components = array(
'DebugKit.Toolbar',
);
public function beforeRender() {
parent::beforeRender();
$this->layout = 'app';
}
}
不过好像也影响了我开发需要的CakePHP生成的内部错误页面:
有没有办法让这样的页面使用 app\View\Layouts\default.ctp
而不是 app.ctp
?
您可以通过创建自定义异常渲染器来做到这一点:-
// app/Lib/Error/AppExceptionRenderer.php
class AppExceptionRenderer extends ExceptionRenderer {
public function render() {
$this->controller->layout = 'default';
parent::render();
}
}
然后在 app/Config/core.php 中确保你告诉 Cake 使用你的 AppExceptionRenderer
class 来处理异常:-
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'AppExceptionRenderer',
'log' => true
));
使用自定义异常渲染器可以让您更灵活地处理应用中的异常。
最后,将自定义布局定义从 \AppController::beforeRender
移动到 \AppController::beforeFilter
,以便它运行得更早,并且可以在出现错误时被覆盖:
class AppController extends Controller {
public function beforeFilter() {
parent::beforeFilter();
$this->layout = 'app';
}
}
我想从头开始设计我的应用程序样式,所以我创建了一个全新的布局并将其指定为默认布局:
class AppController extends Controller {
public $components = array(
'DebugKit.Toolbar',
);
public function beforeRender() {
parent::beforeRender();
$this->layout = 'app';
}
}
不过好像也影响了我开发需要的CakePHP生成的内部错误页面:
有没有办法让这样的页面使用 app\View\Layouts\default.ctp
而不是 app.ctp
?
您可以通过创建自定义异常渲染器来做到这一点:-
// app/Lib/Error/AppExceptionRenderer.php
class AppExceptionRenderer extends ExceptionRenderer {
public function render() {
$this->controller->layout = 'default';
parent::render();
}
}
然后在 app/Config/core.php 中确保你告诉 Cake 使用你的 AppExceptionRenderer
class 来处理异常:-
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'AppExceptionRenderer',
'log' => true
));
使用自定义异常渲染器可以让您更灵活地处理应用中的异常。
最后,将自定义布局定义从 \AppController::beforeRender
移动到 \AppController::beforeFilter
,以便它运行得更早,并且可以在出现错误时被覆盖:
class AppController extends Controller {
public function beforeFilter() {
parent::beforeFilter();
$this->layout = 'app';
}
}