是否可以在错误页面中显示默认布局?

时间:2017-05-09 09:57:42

标签: cakephp cakephp-2.9

我想从头开始设计我的应用程序,所以我创建了一个全新的布局并将其指定为默认值:

class AppController extends Controller {

    public $components = array(
        'DebugKit.Toolbar',
    );

    public function beforeRender() {
        parent::beforeRender();

        $this->layout = 'app';
    }
}

但是,它似乎也影响了我开发所需的CakePHP生成的内部错误页面:

Actual

有没有办法让这些网页使用app\View\Layouts\default.ctp代替app.ctp

Intended

1 个答案:

答案 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';
    }
}