为前端和管理路由器使用相同的Magento路由前端名称

kir*_*era 6 routing magento

我发现了Magento路由逻辑的一个问题,我想看看是否有人可以证实这一点.

Magento堆栈路由器admin,standard,然后默认并一次处理一个.Magento根据URL获取当前模块名称(请参阅Mage_Core_Controller_Varien_Router_Standard::match()),然后检查模块是否应该由此路由器处理,基于与Magento配置中的frontName的匹配.如果找到匹配,则路由它.如果不匹配,则它继续到下一个路由器.

配置摘录:

    <admin>
        <routers>
            <myroute>
                <use>admin</use>
                <args>
                    <module>MyNamespace_MyModule</module>
                    <frontName>myroute</frontName>
                </args>
            </myroute>
        </routers>
    </admin>
    <frontend>
        <routers>
            <myroute>
                <use>admin</use>
                <args>
                    <module>MyNamespace_MyModule</module>
                    <frontName>myroute</frontName>
                </args>
            </myroute>
        </routers>
    </frontend>
    

这意味着如果您的前端路由器使用与管理路由器相同的名称,则管理路由器将始终首先匹配,即使在前端页面上也是如此.您的前端页面现在将按原样路由,如果是管理员页面,使用管理员base_url,这可能与您的商店的URL不同导致重定向损坏.

请注意,在Magento实例中,此问题不明显,其中管理基本URL与前端基本URL相同.

任何人都可以确认我对路由器逻辑的评估是否正确?

kir*_*era 3

这不是 Magento 错误,但在编写模块或使用第三方代码时需要注意。我已经在这里澄清了问题和解决方案。本质上,应始终使用现有的 adminhtml 路由,而不是创建新的管理路由。这使得管理中的 URL 保持一致并避免冲突。感谢 Alan 和 Jared 帮助我更好地理解 Magento 路由。