php - 在 EVENT_RENDER_ERROR 上加载视图时出现问题
问题描述
我是 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 Europe/Berlin] PHP 致命错误:未捕获的异常 'Zend\View\Exception\RuntimeException' 带有消息 'Zend\View\Renderer\PhpRenderer::render: Unable to render template "exception "; 解析器无法解析到 /var/www/vhosts/vendor/zendframework/zendframework/library/Zend/View/Renderer/PhpRenderer.php:499 中的文件
或这个:
#0 /var/www/vhosts/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractActionController.php(83): Dashboard\Controller\InboxController->listAction()
#1 [内部函数]: Zend\Mvc \Controller\AbstractActionController->onDispatch(对象(Zend\Mvc\MvcEvent))
我只想加载一个普通视图,以防整个项目发生意外错误。
先感谢您。
解决方案
您可以通过不同方式为您的模块定义自定义错误模板。最常见的 - 在我看来更简单的方法 - 是通过在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 框架将遍历堆栈,直到找到异常模板。
推荐阅读
- android - 如何使用原生相机和 Appium 拍照?
- java - 滚动到内容描述文本
- java - 在 amazon-sqs-java-messaging-lib 中,numberOfMessagesToPrefetch 0 或 1 有什么区别?
- javascript - reactjs渲染中的BFS路径
- python - ModelCheckpoint 中除了图之外还存储了哪些信息?
- kotlin - Kotlin - 当json中不存在非空属性时,强制从json到类的反序列化失败?
- java - 在推送通知点击上打开特定片段
- android - 与 Google 消息应用程序具有相同样式的可绘制语音/文本气泡
- elm - 你如何在榆树中使用包?(我想使用 elm-pagination 包)
- java - 单击按钮时同时播放不同的声音