我刚刚开始将我的一些应用程序从Zend#1迁移到Zend#3。一切都很好,但对于观点,我在理解基本概念方面遇到了一些麻烦。
正如教程所示,我的项目布局是这样的:
module
Application
view
application
index
main.phtml
foo.phtml
baz
index.phtml
我想知道为什么你需要对'#34;应用程序"视图目录中的文件夹 - 您已经在模块的目录hirachy中。有没有办法更改默认模板解析程序的搜索路径,以便省略模块名称?只需依靠viewManager" template_path_stack"不管用。我真的需要在这里写一个自定义解析器吗?
非常感谢!
PS。不,我不想在这里使用自定义模板地图;-)我想了解并使用没有模板地图的默认左轮手枪,如果可能的话。
答案 0 :(得分:1)
找到一种可能的解决方案!
在你的模块的配置中将这个添加到view_manager ::
'controller_map' => [
'Dashboard\Controller\DashboardController' => 'Dashboard'
],
框架现在将寻找“Dashboard / view / [controller] / [action] .phtml”,而不是寻找名为“Dashboard / view / dashboard / [controller] / [action] .phtml”的模板。基本上你告诉Zend在这里使用某种速记并从模板分辨率中去掉数组的值(看一下InjectTemplateListener :: mapController())
无论如何......欢迎更好的解决方案和解释!
答案 1 :(得分:1)
"用途"是整个应用程序中模块的名称。'一开始,"应用程序"是唯一的模块,但通常添加其他模块:您可能有一个模块用于"客户端"和#34;供应商的另一个模块。"视图文件夹的层次结构遵循与ModuleName:ControllerName:ActionName相同的层次结构,并且ZF需要在视图文件夹层次结构中使用模块名称,以防您在两个或更多模块中碰巧具有相同的控制器和操作名称对。很可能是一个"客户"模块和"供应商"模块都有一个"索引"行动。两者不太可能具有相同的控制器名称,但它并不是完全不可能的。如果您有一个名为" Contacts"在一个"客户"模块和"供应商"模块,"联系人/索引"没有足够的信息告诉ZF使用哪个视图。它需要文件夹层次结构中的模块名称来区分" clients / contacts / index"和"供应商/联系人/索引"。
ZF3可以解决路由器定义,查看文件夹以及谁知道所有不同模块中的其他内容并将它们聚合到一个结构中的问题。换句话说,
module
Application
view
application
add
add.phtml
delete
delete.phtml
edit
edit.phtml
index
index.phtml
module
Clients
view
clients
add-client
add.phtml
delete-client
delete.phtml
edit-client
edit.phtml
client-index
index.phtml
module
Vendors
view
vendors
add-vendor
add.phtml
delete-vendor
delete.phtml
edit-vendor
edit.phtml
vendor-index
index.phtml
得到如此认可:
module
....
view
application
add
add.phtml
delete
delete.phtml
edit
edit.phtml
index
index.phtml
clients
add-client
add.phtml
delete-client
delete.phtml
edit-client
edit.phtml
client-index
index.phtml
vendors
add-vendor
add.phtml
delete-vendor
delete.phtml
edit-vendor
edit.phtml
vendor-index
index.phtml
如果您愿意,可以将所有视图文件放入单个模块中。
也许这有助于解释为什么带有模块名称的文件夹包含在"视图"夹。模块名称位于"视图"之上的文件夹文件夹有一个存储功能。模块名称低于"视图"文件夹用作引用聚合定义中视图文件与哪些模块相关联的方法。