我有一个包含3个模块和路由配置的应用程序,如下所示:
并为每个模块中的所有控制器设置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
< / p>
如何使用不同的DI别名来匹配相同的控制器名称?
答案 0 :(得分:3)
在将新视图层合并到主视图之前,需要让控制器的别名在解析视图脚本时正常运行。现在不再需要了,甚至不建议再使用控制器的别名。别名的问题是一个FQCN有一个别名,所以你的问题与此直接相关。
您需要做的是从DI配置中删除别名并使用显式路由。 “神奇”路线[:控制器[/:action]]是一种不好的做法,导致更多的问题,而不是它可以帮助你。所以写一些显式路由并删除别名。