ZF2-渲染自定义404错误页面

时间:2014-07-24 19:20:15

标签: php zend-framework2

我在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);

由于

0 个答案:

没有答案