2013-04-29 44 views
3

./config/application.config.phpZendFramework 2 - 错误装载布局不同模块

return array(
    'modules' => array(
     'Application', 
     'Admin', 
    ) 
    ... 

我有2个单独的布局,./module/Application/view/layout/layout.phtml的集合和./module/Admin/view/layout/layout.phtml

./module/Admin/config/module.config.php

... 
'template_map' => array(
    'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 
    'header'  => __DIR__ . '/../view/layout/header.phtml', 
    'footer'  => __DIR__ . '/../view/layout/footer.phtml', 
    'paginator'  => __DIR__ . '/../view/layout/paginator.phtml', 
    'error/404'  => __DIR__ . '/../view/error/404.phtml', 
    'error/index' => __DIR__ . '/../view/error/index.phtml', 
) 
... 

./module/Application/config/module.config.php

... 
'template_map' => array(
    'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 
    'header'  => __DIR__ . '/../view/layout/header.phtml', 
    'footer'  => __DIR__ . '/../view/layout/footer.phtml', 
    'paginator'  => __DIR__ . '/../view/layout/paginator.phtml', 
    'error/404'  => __DIR__ . '/../view/error/404.phtml', 
    'error/index' => __DIR__ . '/../view/error/index.phtml', 
) 
... 

基本上他们是不同的设置和一些内容是不同的。不幸的是,这两个模块只加载位于./module/Admin/config/module.config.php的布局

我GOOGLE了,但没有来自我想要的任何解决方案。任何人都有这个想法吗?

回答

8

你可能有兴趣知道你的配置实际上做了什么。 My Blog Post about this Topic,可能会让你感兴趣。最终所有的配置文件将被合并为一个。全局配置键在每个模块的基础不

要实现你的目标,你应该阅读Evan Courys Blog Post "Module-specific layouts in ZF2"

埃文提供a Module "EdpModuleLayouts"这使事情很容易。然而,如果你只需要一个替代布局为您AdminModule,那么我建议你简单地用他的博客的示例代码去通过您的AdminModule/Module::onBootstrap

class Module 
{ 
    public function onBootstrap($e) 
    { 
     $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) { 
      $controller  = $e->getTarget(); 
      $controllerClass = get_class($controller); 
      $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\')); 
      if ('AdminModule' === $moduleNamespace) { 
       $controller->layout('layout/admin'); 
      } 
     }, 100); 
    } 
} 

不,这将设置为您的AdminModule directy备用布局布局到layout/admin。您需要通过您的配置提供此密钥:

'template_map' => array(
    'layout/admin' => 'path/to/admin/module/view/layout/admin.phtml', 
) 
+0

哇!它完美的作品。谢谢 – 2013-04-30 03:09:52

+0

在ZF 2.2.2中,我必须替换$ moduleNamespace变量,然后它对我有用:'if('Admin'=== $ moduleNamespace){$ controller-> layout('layout/admin'); }' – 2014-03-30 13:16:40