Zend Framework2 - Layout配置,不同模块Module设置不同的layout

想必大部分的人都是从ZendSkeletonApplication开始学习zf2的,也理所当然的认为每个module的view_manager是独立的,互补干扰的,
但是我们错了,不同module之间共用同一个view_manager配置,后来加载module的view_manager会覆盖前面加载的module的view_manager同名(即key值相同)配置,
这种设计大部分时候都没什么问题,但是layout这种配置就开始互相覆盖了,
开始介绍为不同模块配置不同的layout。


1.新建一个Test模块(将Application模块复制一份,改改相关的名字即可),
在zf2.local/module/Test/config/module.config.php的view_manager的template_map配置你module的layout路径,
代码如下:

'view_manager' => array(    
    'template_map' => array(
        'test/layout' => __DIR__ . '/../view/test/layout/layout.phtml',    
    ),    
    'template_path_stack' => array(    
        'test'=>__DIR__ . '/../view/'    
    ),
)

2.修改zf2.local/module/Test/Module.php的class Module如下

class Module{    
    public function onBootstrap(MvcEvent $mvcEvent)    {        
        $eventManager = $mvcEvent->getApplication()->getEventManager();        
        $moduleRouteListener = new ModuleRouteListener();        
        $moduleRouteListener->attach($eventManager);        // Register a dispatch event        
        $application = $mvcEvent->getParam('application');        
        $application->getEventManager()->attach('dispatch', array($this, 'setLayout'));    
    }


    /**
     * @param/Zend/Mvc/MvcEvent $mvcEvent The MvcEvent instance    
     * @return void    
     */    
    public function setLayout($mvcEvent)    {        
        $matches = $mvcEvent->getRouteMatch();        
        $controller = $matches->getParam('controller');        
        if (false === strpos($controller, __NAMESPACE__)) {
            // not a controller from this module
            return false;        
        }        
        // Set the layout template        
        $viewModel = $mvcEvent->getViewModel();        
        $viewModel->setTemplate('test/layout');    
    }    
    
    public function getConfig() {        
        return include __DIR__ . '/config/module.config.php';    
    }    
    
    public function getAutoloaderConfig()    {        
        return array(
            'Zend/Loader/StandardAutoloader' => array(                
                'namespaces' => array(                    
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,                
                ),            
            ),        
        );    
    }
}

然后就可以达到不同module使用不同layout。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值