View 来自不同模块的同名zend 2视图渲染模板

View 来自不同模块的同名zend 2视图渲染模板,view,zend-framework2,rendering,code-duplication,View,Zend Framework2,Rendering,Code Duplication,我在Zend2中使用可重用模块,我有一个小问题,涉及代码复制 我有一个用户模块,它有一个HTML模板寄存器(模板路径:User/User/register)。 它包含一些基本的HTML,但在我的一个项目中,我需要在这个模板中嵌入一个用于CSS样式化的(HTML页面的其余部分不变) 在用户模块之后,我加载我的应用程序模块,在那里我可以覆盖用户/用户/注册模板并放入新代码,但我无法通过它呈现原始用户/用户/注册模板 应用程序模块->用户/用户/寄存器中的代码示例: <div><?=

我在Zend2中使用可重用模块,我有一个小问题,涉及代码复制

我有一个用户模块,它有一个HTML模板寄存器(模板路径:User/User/register)。 它包含一些基本的HTML,但在我的一个项目中,我需要在这个模板中嵌入一个用于CSS样式化的
(HTML页面的其余部分不变)

在用户模块之后,我加载我的应用程序模块,在那里我可以覆盖用户/用户/注册模板并放入新代码,但我无法通过它呈现原始用户/用户/注册模板

应用程序模块->用户/用户/寄存器中的代码示例:

<div><?=$this->render('user/user/register')?></div>

这会导致一个无休止的循环,我不想从用户模块中的user/user/register模板复制/粘贴所有HTML

有人能帮我吗


谢谢大家!

你想要达到的目标是行不通的。不能有两个名称相同的模板。加载最新密钥的模块将始终具有优先级

您必须了解,模板只是大数组中的一个键

'view_manager' => array(
    'template_map' => array(
        'layout/layout' => 'my\layout.phtml'
    )
)
因此,如果您有两个模块提供此配置,那么这不会改变两个模块都使用键
layout/layout
的事实。因此,无论稍后加载什么模块,都将获胜


TL/DR您只能覆盖模板,不能扩展模板。在您的情况下,您必须创建一个单独的模板。

我理解这一原则,我刚才问的是一种不在两个模板之间复制代码的方法,其中一个模板正好是第二个模板的内容加上一些html代码。由于我没有找到解决方案,我只是复制了模板代码,但它为模板的进一步更新创建了大量代码债务。是否有一种方法可以到达特定模块中的模板路径?就像我想从模板user/user/register-in-Application模块在用户模块中呈现user/user/register一样?你不应该有相同的模板名称,这就是全部想法。模板应该像类一样使用名称空间。将你的第二个模块命名为“user2/user/register”,然后呈现一个部分“user/user/register”,你很好,我明白了。我的应用程序模块必须重写路由用户/寄存器,并告诉它使用“ApplicationUser”作为控制器(而不是用户控制器),然后我的“ApplicationUser”控制器->registerAction将请求转发给我的用户模块(registerAction)并返回结果。现在,名为application/application user/register的视图呈现部分“user/user/register”模板。非常感谢。