我想从头开始设计我的应用程序,所以我创建了一个全新的布局并将其指定为默认值:
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
?
答案 0 :(得分:2)
您可以通过创建自定义异常渲染器来执行此操作: -
// app/Lib/Error/AppExceptionRenderer.php
class AppExceptionRenderer extends ExceptionRenderer {
public function render() {
$this->controller->layout = 'default';
parent::render();
}
}
然后在app / Config / core.php中确保告诉Cake使用您的AppExceptionRenderer
类来处理异常: -
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';
}
}