在 EVENT_RENDER_ERROR 上加载视图时出现问题
Problem loading view on 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 Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message 'Zend\View\Renderer\PhpRenderer::render: Unable to render template "exception"
; resolver could not resolve to a file' in /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 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(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 框架将遍历堆栈,直到找到异常模板。
我是 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 Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message 'Zend\View\Renderer\PhpRenderer::render: Unable to render template "exception" ; resolver could not resolve to a file' in /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 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(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 框架将遍历堆栈,直到找到异常模板。