在EVENT_RENDER_ERROR上加载视图时出现问题

时间:2019-05-06 15:31:47

标签: php templates zend-framework2

我是ZF2的新手,似乎我无法做我想做的事。

我正在处理的项目偶尔会遇到一些我现在无法捕获的PDO异常,因此我希望在应用程序加载时具有一个通用函数,该函数会在发生此类异常时加载自定义错误页面。

在发生这些异常时,不会加载global.php中的'exception_template',因此我创建了一个函数,该函数在EVENT_RENDER_ERROR上调用,我基本上想在其中加载该视图。

我尝试过类似的事情:

$redirect_view = new ViewModel();
$redirect_view->setTemplate('error/exception');

也尝试过:

$e->setViewModel()->clearChildren();
$e->setViewModel()->addChild($redirect_view);
$e->stopPropagation(true);

但是我要么得到这个错误:

  

[06-May-2019 15:11:19欧洲/柏林] PHP致命错误:消息为“ Zend \ View \ Renderer \ PhpRenderer :: render”的未捕获异常'Zend \ View \ Exception \ RuntimeException':无法呈现模板“例外”   ;解析器无法解析为/var/www/vhosts/mopinion.nl/mopinion/vendor/zendframework/zendframework/library/Zend/View/Renderer/PhpRenderer.php:499

中的文件

或者这个:

  

#0 /var/www/vhosts/mopinion.nl/mopinion/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractActionController.php(83):Dashboard \ Controller \ InboxController-> listAction()< br />   #1 [内部功能]:Zend \ Mvc \ Controller \ AbstractActionController-> onDispatch(Object(Zend \ Mvc \ MvcEvent))

我只想加载纯视图,以防整个项目中发生意外错误。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以通过不同的方式为模块定义自定义错误模板。最常见的方法-在我看来更容易-是在模块的module.config.php文件中定义模板的方法。

return [
    'controllers' => [ 
        /* your controllers here */
    ],
    'routes' => [
        /* your routes go here */
    ],
    'view_manager' => [
        'exception_template' => 'error/exception',
        'template_map' => [
            'error/exception' => __DIR__ . '../view/error/exception.phtml'
        ],
        'template_path_stack' => [
            __DIR__ . '../view',
        ],
    ],
];

如您所见,您可以通过template_map选项添加一个个人模板。另外,向模板路径堆栈添加新路径,并且zend框架将遍历堆栈,直到找到异常模板为止。