3

./config/application.config.php

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',
)
...

基本上它们是不同的集合,并且某些内容是不同的。不幸的是,这两个模块都只加载位于 In./module/Admin/config/module.config.php

我用谷歌搜索但没有找到我想要的任何解决方案。有人对此有任何想法吗?

4

1 回答 1

8

您可能有兴趣知道您的配置实际上做了什么。我关于这个主题的博客文章,你可能会感兴趣。最终,所有配置文件都将合并为一个。全局配置键不是基于每个模块的;)

为了实现您的目标,您应该阅读Evan Courys 博客文章“ZF2 中的模块特定布局”

Evan 提供了一个模块“EdpModuleLayouts”,使事情变得非常简单。但是,如果您的 AdminModule 只需要一种替代布局,那么我建议您只需使用他的博客文章的示例代码即可通过您的 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);
    }
}

并不是说这会将布局设置为layout/admin. 您需要通过配置提供此密钥:

'template_map' => array(
    'layout/admin' => 'path/to/admin/module/view/layout/admin.phtml',
)
于 2013-04-29T12:15:26.753 回答