3

我有一个包含 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但因为站点模块(最后注册)具有相同的别名给indexSite\Controller\IndexController

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

4

1 回答 1

3

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

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

于 2012-04-15T10:21:40.973 回答