bilhackmac/routes-match-inverter-module

允许以反向模块顺序匹配路由

v1.1.0 2015-05-26 09:31 UTC

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),但这可能很无聊,或者只是一个你无法掌控的第三模块。

因此,此模块反转了没有定义路由器的模块路由匹配方式,这就是魔法发生的地方,之前的表格变成了