如何为错误页面使用自定义主题?

时间:2016-08-12 15:48:28

标签: cakephp error-handling themes cakephp-3.2

我正在开发一个使用主题布局的应用程序,我也需要为所有错误页面使用自定义主题。

查看the docs,我发现我可以使用

轻松更改布局
$this->layout = 'mylayout';

在错误页面本身,但我也需要更改主题。我试过

$this->theme = 'mytheme';

但错误页面仍然使用默认主题,所以我猜这不是设置它的正确方法。

为错误页面设置主题的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

Themes最容易通过node (around:...)事件或早期CakePHP版本通过way属性设置。

默认的异常渲染器使用新的控制器实例来处理错误,因此您可以例如

创建自定义错误控制器并添加侦听器/回调

一个选项是创建一个自定义错误控制器,您可以像在常规控制器中一样设置主题。默认情况下,CakePHP将使用Controller.beforeRender(如果存在),因此您需要做的就是创建控制器。

<强> SRC /控制器/ ErrorController.php

Controller::$theme

完成后,所有例外现在都应使用\App\Controller\ErrorController主题。

另见

创建自定义异常渲染器并向控制器添加侦听器

您还可以创建自定义/扩展异常渲染器,并覆盖namespace App\Controller; use Cake\Controller\Controller; use Cake\Event\Event; class ErrorController extends Controller { public function beforeRender(Event $event) { $this->viewBuilder()->theme('ErrorThemeName'); } } ,并为可以设置主题的ErrorThemeName添加适当的侦听器。

<强>的src /错误/ AppExceptionRenderer.php

ExceptionRenderer::_getController()

<强>配置/ app.php

Controller.beforeRender

另见

<强> Cookbook > Error & Exception Handling > Using the exceptionRenderer Option of the Default Handler