在ZF2中配置视图路径

时间:2016-02-12 14:49:48

标签: php zend-framework2

我已经从骨架应用程序开始,我正在尝试根据自己的喜好自定义它。我不喜欢文件夹结构,因为它似乎有很多冗余/不一致。

至于我目前的问题,我想把我的所有观点保存在这样的结构中:

├── module
    ├── view
        ├── controller
            ├── action.phtml

当前强制使用的骨架应用程序是这样的:

├── module
    ├── view
        ├── module      [This is what I want to get rid of , it is redundant]
            ├── controller
                ├── action.phtml

我确实看到你有配置选项:

'template_path_stack' => [ $dir . '/../view',  ],

但正如您所见,它仍然假设该视图文件夹下存在dir模块。这就是我想要避免的。

还有一个模板地图,但据我所知,它允许你操纵特定的路径。我不想编辑此字段,并在每次添加新操作时在地图中添加新视图

1 个答案:

答案 0 :(得分:1)

您可以编写自己的Zend \ Mvc \ View \ Http \ InjectTemplateListener实现

只需使用原始代码作为基础,并删除与第80行周围的$ module相关的行(在InjectTemplateListener :: injectTemplate中)。删除:

$template   = $this->inflectName($module); 

应该做你需要的但你可能想要整理一下。然后以优先于

的优先级附加您的实现

在您的某个应用程序模块中的module.php中

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

    $injectTemplateListener  = new InjectTemplateListener();

    $eventManager->getSharedManager()->attach('Zend\Stdlib\DispatchableInterface', 
                                              MvcEvent::EVENT_DISPATCH,
                                              array($injectTemplateListener, 
                                                    'injectTemplate'
                                              ),
                                              -85
    );
}

或者你也许可以完全停止原始事件,而不是像上面那样覆盖模板