我在ZF2应用程序中有多个模块。我希望每个模块都有自己的404错误页面。我注意到module.config.php中有一个not_found_template
键,我可以在其中设置错误phtml。但是当启用ZF2缓存时,每个模块都会写入此键值。
所以,我尝试在每个模块的Module.php的onBootStrap
函数中提出以下代码。此代码尝试捕获404错误,切换该模块的布局并正确呈现页面。
以下代码一直有效,直到ViewModel部分返回,但代码仍然试图查找not_found_template键。任何人都可以帮助修复这段代码,以便正确呈现404吗?
$eventManager = $e->getApplication()->getEventManager();
$serviceManager = $e->getApplication()->getServiceManager();
$eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function(MvcEvent $event)
use ($serviceManager )
{
$response = $event->getResponse();
if ($response->getStatusCode() == "404")
{
$viewModel = new \Zend\View\Model\ViewModel(array(
'message' => 'Page not found',
'reason' => 'error-occurred',
'exception' => 'Page not found - 404',
));
$request = $event->getRequest();
$response = $event->getResponse();
//Render AJAX error view if it's an AJAX Request,
//else render normal error view.
if ($request->isXmlHttpRequest()) {
$viewModel->setTerminal(true);
$viewModel->setTemplate('error/404-ajax.phtml');
}
else
{
$viewModel->setTemplate('error/404.phtml');
}
$event->getViewModel()->addChild($viewModel);
$event->stopPropagation();
$response->setStatusCode(200);
return $viewModel;
}
}, -100);
由于