0

我刚刚开始将我的一些应用程序从 Zend#1 迁移到 Zend#3。一切正常,但关于这些观点,我在理解基本概念时遇到了一些麻烦。

正如教程所建议的那样,我的项目布局是这样的:

module
  Application
    view
      application
        index
          main.phtml
          foo.phtml
        baz
          index.phtml

我想知道为什么你需要在视图目录中复制“应用程序”文件夹 - 你已经在模块的目录中。有没有办法更改默认模板解析器的搜索路径,以便省略模块名称?仅仅依靠 viewManager 的“template_path_stack”是行不通的。我真的需要在这里编写自定义解析器吗?

非常感谢!

PS。不,我不想在这里使用自定义模板地图 ;-) 如果可能的话,我想了解并使用没有模板地图的默认左轮手枪。

4

2 回答 2

1

“应用程序”是整个“应用程序”中模块的名称。一开始,“应用程序”是唯一的模块,但通常会添加其他模块:您可能有一个模块用于“客户端”,另一个模块用于“供应商”。视图文件夹的层次结构遵循与 ModuleName:ControllerName:ActionName 相同的层次结构,并且 ZF 需要使用视图文件夹层次结构中的模块名称,以防您碰巧在两个或多个模块中具有相同的控制器和操作名称对。“Clients”模块和“Vendors”模块很可能都具有“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

如果您愿意,您可能可以将所有视图文件放入一个模块中。

也许这有助于解释为什么具有模块名称的文件夹包含在“视图”文件夹下。“view”文件夹上方的模块名称文件夹具有存储功能。在“视图”文件夹下方具有模块名称的文件夹用作引用视图文件与聚合定义中关联的模块的一种方式。

于 2018-05-09T06:12:37.483 回答
1

找到了一种可能的解决方案!

在你的模块配置中添加这个到 view_manager::

'controller_map' => [
    'Dashboard\Controller\DashboardController' => 'Dashboard'
],

框架现在将寻找“Dashboard/view/[controller]/[action].phtml”,而不是寻找名为“Dashboard/view/dashboard/[controller]/[action].phtml”的模板。基本上,您是在告诉 Zend 在这里使用某种速记并将数组的值从模板解析中剥离(看看 InjectTemplateListener::mapController())

无论如何...欢迎提供更好的解决方案和解释!

于 2018-05-07T20:59:37.313 回答