2017-05-09 87 views
1

我想,所以我已经创建了一个全新的布局和分配为默认从头样式我的应用程序:是否可以在错误页面中显示默认布局?

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

回答

2

您可以通过创建一个自定义异常渲染做到这一点: -

// app/Lib/Error/AppExceptionRenderer.php 
class AppExceptionRenderer extends ExceptionRenderer { 

    public function render() { 
     $this->controller->layout = 'default'; 
     parent::render(); 
    } 

} 

然后在app /配置/ core.php中一定要告诉蛋糕使用你的AppExceptionRenderer类处理异常: -

​​

使用自定义的异常渲染器为您在应用程序中处理异常的方式提供了更大的灵活性。

最后,从\AppController::beforeRender\AppController::beforeFilter移动定制的布局定义,因此早期的运行,可以在出现错误时覆盖:

class AppController extends Controller { 
    public function beforeFilter() { 
     parent::beforeFilter(); 
     $this->layout = 'app'; 
    } 
} 
+0

有没有'\ ExceptionRenderer :: beforeFilter'回调。有'\ ExceptionRenderer :: render',但它没有任何'layout'属性。此外,'\ AppController :: beforeRender'在以后被调用* ...: - ? –

+0

对不起@ÁlvaroGonzález我的错误,你可以从'render'方法访问控制器,并设置布局。我已经更新了我的回答来证明这一点。 – drmonkeyninja

+0

谢谢。这会将布局成功更改为默认值,但之后'\ AppController :: beforeRender'将它重新设置为'app'(记住,我需要将'default'设置回原因,因为我正在修改它)。不知道我是否错过了一些东西。 –

相关问题