【问题标题】:Zend Framework 2 DI alias, same controller name in different modulesZend Framework 2 DI 别名,不同模块中的控制器名称相同
【发布时间】:2012-04-14 04:17:58
【问题描述】:

我有一个包含 3 个模块和路由配置的应用程序,如下所示:

  • admin.domain.tld/[:controller[:/action]] => 管理员
  • rest.domain.tld/[:controller[:/id]] => 休息
  • domain.tld/[:controller[:/action]] => 站点

并为每个模块中的所有控制器设置DI别名

REST 模块 DI 别名:

'alias' => array(
    'index' => 'Rest\Controller\IndexController',
    ...
),

管理模块 DI 别名:

'alias' => array(
    'index' => 'Admin\Controller\IndexController',
    ...
),

站点模块 DI 别名:

'alias' => array(
    'index' => 'Site\Controller\IndexController',
    ...
),

如您所见,一些控制器具有相同的名称(例如:IndexController),但由于 zf2 将配置与 LIFO 行为合并,'index' 别名总是来自最后添加的模块。

应用程序配置

'modules' => array('Rest','Admin', 'Site'),

当我访问http://admin.domain.tld/ 时,我希望index 别名给出Admin\Controller\IndexController,但由于站点模块(最后注册)具有相同的别名index 它给出Site\Controller\IndexController

如何使用不同的DI别名来匹配相同的控制器名称?

【问题讨论】:

  • 您可以发布一些配置/DI 吗?
  • 我更新了问题,向您展示每个模块和应用程序模块配置注册的 DI 别名配置。
  • 查看 Akrabat 网站的配置:akrabat.com/zend-framework-2/… 他为每个模块生成路由器,而不是别名。
  • @Gabriel 谢谢,我想在这里实现的是使用包罗万象的路由,而不是为每个控制器添加单独的路由,但根据 Matthew 的说法,他们一直致力于 per-module solutions,直到那时最好的解决方案是使用特定的每个路由器
  • Akrabat 执行每个模块的工作..

标签: zend-framework2


【解决方案1】:

在新的视图层合并到主视图层之前,控制器需要有别名才能在解析视图脚本时正确运行。现在不再需要了,甚至不再建议使用控制器别名。别名的问题是一个 FQCN 有一个别名,所以你的问题与此直接相关。

您需要做的是从 DI 配置中删除别名并改用显式路由。 “魔术”路线 [:controller[/:action]] 是一种不好的做法,并且会导致比它可以帮助您更多的问题。所以写一些明确的路线并删除别名。

【讨论】:

  • 感谢您的回复,不知何故我更喜欢上面的方法,它在当前带有 zf1 的应用程序中运行良好,这里我只是想将其转换为 zf2。每个模块都有很多控制器,我不想为每个模块编写一堆路由配置。我认为如果 DI 支持模块隔离配置甚至前缀别名会很好
  • @Komang 我刚刚写下了推荐的内容和建议的方式。目前还没有一条“神奇”的路线,但会有一条涵盖您的用例。您可能会在路线名称中遇到冲突,这不是最快的方法,但对于 RAD 进程来说可能很容易。您仍然可以将分段路线与可选分段用于操作和其他参数,您不需要完全指定所有路线点。但是,对于控制器,如果您想保持应用程序模块化,请不要使用别名。
  • 再次感谢,Matthew 也提出了相同的方法,因此在这种情况下没有其他线索可以保持包罗万象的路由 :/controller。 〜“会有一个涵盖你的用例”〜有没有建议?
  • @Komang 没有提案,但在 AgileZen 板上有一个故事:agilezen.com/project/33552/story/24。您可以在那里跟踪更改。如果您还没有 Agilezen.com 帐户,您也可以在framework.zend.com/zf2/board查看概述
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多