在Magento 2中设置管理路线


15

查看核心的Magento 2代码,似乎有两种方法来设置管理路径。

首先

#File: vendor/magento/module-media-storage/etc/adminhtml/routes.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route id="adminhtml">
            <module name="Magento_MediaStorage" />
        </route>
    </router>
</config>

与Magento 1类似。您将模块添加到adminhtml路径中的模块列表中,Magento会为您检查它。

第二

#File: vendor/magento/module-cms/etc/adminhtml/routes.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route id="cms" frontName="cms">
            <module name="Magento_Cms" before="Magento_Backend" />
        </route>
    </router>
</config>

有你建立一个新的路径(ID cms以上),然后将你的模块吧。

在Magento 2中,其中一种方法是“正确/首选”方法吗?如果没有,两者之间有什么区别?也就是说,您什么时候可以使用另一个?

要求不解决特定问题,但要确保我以正确的方式创建路由,并且避免了类似于Magento 1模块的问题(拉入ajax库,安全性等)。

Answers:


23

区别在于网址。网址具有以下结构: <areaFrontName>/<moduleFrontName>/<actionPath>/<actionName>

路由“ Adminhtml”具有moduleFrontName“ admin”,与areaFrontName相同。因此,“ adminhtml”路由下的所有路径都将以开头admin/admin

如果要使用更特定的网址,则应使用特定的路由,例如目录。目录网址均以开头admin/catalog。这是首选方式。

因此首选配置为:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route id="cms" frontName="cms">
            <module name="Magento_Cms"/>
        </route>
    </router>
</config>

请注意,before="Magento_Backend"不需要


3
关于ID和frontName的命名有什么解释吗?管理区应该一样吗?它应该使用模块名称吗?为什么当id!= frontName时它不起作用?
谢尔盖·科若夫

4

在寻找如何添加adminhtml控制器的示例时,我也碰到了这一点。我做了一些研究,这就是我所发现的。

route id="adminhtml"方法在核心中使用了24次。

before="Magento_Backend"方法在核心中使用了31次。

只有50个模块带有adminhtml / routes.xml,但24 + 31 =55。提示#1。

我试图在哪种类型的模块使用哪种类型之间找到一个共同的分母,但是我似乎无法识别任何一个。因此,也许是在某个时间点引入了更改,所以我检查了这两种类型的时间。不幸的是,这很困难,因为其中大多数都是在9月中旬进行编辑以引入新的的,所以我不得不使用Github的历史功能。

然后,我注意到使用了该route id="adminhtml"选项的一些route.xml文件使用before="Magento_Backend",例如参见Magento_UrlRewrite的routes.xml文件。我似乎找不到这三个变体之间的任何决定性共性。

我还检查了新模块(M1中没有这些模块,因此无法移植,但为M2编写了新模块),例如AdvancedPricingImportExportIntegrationMediaStorageEncryptionKey,尽管有些使用了before="Magento_Backend",有些却没有,他们都使用了该<route id="adminhtml">标签。其中,没有的before="Magento_Backend"标记在2015年2月进行了最后一次更改,而带有标记的标记则该日期之后进行了编辑。

因此,我的初步结论是,这样做是首选的方式(无论是否在Magento总部内部明确决定);

<config xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <router id="admin">
        <route id="adminhtml">
            <module name="Your_Extension" before="Magento_Backend"/>
        </route>
    </router>
</config>

显然,我很想听听Magento核心开发人员的立场。

更新:安东·克里尔(Anton Kril)回答,请参见他的回答,以了解实现此方法的首选方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.