bilhackmac / routes-match-inverter-module
允许以反向模块顺序匹配路由
Requires
- thelia/installer: ~1.1
This package is not auto-updated.
Last update: 2024-09-28 17:43:43 UTC
README
允许以反向模块顺序匹配路由
安装
手动安装…
将模块复制到 <thelia_root>/local/modules/
目录,并确保模块名称为 RoutesMatchInverter
。
…或者使用Composer
在您的thelia主composer.json
文件中添加它
composer require bilhackmac/routes-match-inverter-module:~1.0
然后
在thelia管理面板中激活它。
说明
在Thelia 2中,您可以通过在另一个模块中配置具有相同id的循环/表单/服务并设置该模块在模块列表中的位置(位置更高)来覆盖任何模块循环/表单/服务。但对于路由来说,这并不起作用
考虑模块A、B和C的配置文件
ModuleA/Config/config.xml
<services> <service id="my.super.service" class="ModuleA\Handler\ModuleAHandler" /> </services>
ModuleA/Config/routing.xml
<route id="my.super.route" path="/my/super/route" methods="get"> <default key="_controller">ModuleA:Main:index</default> </route>
ModuleB/Config/config.xml
<services> <service id="my.super.service" class="ModuleB\Handler\ModuleAHandler" /> </services>
ModuleB/Config/routing.xml
<route id="my.super.route" path="/my/super/route" methods="get"> <default key="_controller">ModuleB:Main:index</default> </route>
ModuleC/Config/config.xml
<services> <service id="my.super.service" class="ModuleC\Handler\ModuleAHandler" /> </services>
ModuleC/Config/routing.xml
<route id="my.super.route" path="/my/super/route" methods="get"> <default key="_controller">ModuleC:Main:index</default> </route>
现在,在任何一个控制器中,如果您调用 $this->container->get('my.super.service')
,您总是得到 最被覆盖的模块服务(位置最高的模块),但是,在您的浏览器/REST客户端中,如果您调用 /my/super/route
,您总是匹配 最少(第一个匹配)的覆盖模块路由。
一个小表格可以更清晰
防止这种行为的办法是定义自己的路由器(《Thelia文档》中的自定义路由Thelia doc),但这可能很无聊,或者只是一个你无法掌控的第三模块。
因此,此模块反转了没有定义路由器的模块路由匹配方式,这就是魔法发生的地方,之前的表格变成了