我是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的方式相同。但它不起作用。对于每个模块,它都需要错误页面的应用程序布局。
请帮助我解决这个问题。