ZendFramework 2 - 为不同的模块设置不同的错误布局

时间:2016-08-26 13:54:30

标签: php zend-framework zend-framework2

我是Zend 2.3的新手并创建了一个Web应用程序。在这个Web应用程序中,我有两个不同的模块,它们有两种不同的布局结构。

我已经为两个模块设置了不同的布局,这些布局仅在分派中没有任何错误时才有效。 现在我想为404错误页面设置不同的布局。

下面是两个模块onBootstrap()::

模块A Module.php

public function onBootstrap($e) {
        $eventManager   = $e->getApplication()->getEventManager();

        $serviceManager = $e->getApplication()->getServiceManager();
        $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function($event) use ($serviceManager ) {
            $response = $event->getResponse();
            if ($response->getStatusCode() == "404")
            {
                $controller = $event->getTarget();
                $controllerClass = get_class($controller);
                $config = $event->getApplication()->getServiceManager()->get('config');
                $controller->layout('modulea/error');
            }
        }, -100);

        $eventManager->getSharedManager()
            ->attach('Zend\Mvc\Controller\AbstractController', 'dispatch', function($e) {
                $controller = $e->getTarget();
                $controllerClass = get_class($controller);
                $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));
                $config = $e->getApplication()->getServiceManager()->get('config');
                if (isset($config['module_layouts'][$moduleNamespace])) {
                    $controller->layout($config['module_layouts'][$moduleNamespace]);
                }
            }, 100);
    }

模块A module.config.php

'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'modulea/layout'           => __DIR__ . '/../view/layout/modulea.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'modulea/error'             => __DIR__ . '/../view/error/index.phtml',
            'javascripts'             => __DIR__ . '/../view/layout/javascripts.phtml',
        ),
        'template_path_stack' => array(
           'modulea' => __DIR__ . '/../view',
        ),
    ),
    'module_layouts' => array(
        'Modulea' => 'layout/modulea.phtml'
    ),

另一个模块模块B的方式相同。但它不起作用。对于每个模块,它都需要错误页面的应用程序布局。

请帮助我解决这个问题。

0 个答案:

没有答案