Magento 2で管理ルートを設定する


15

Magento 2のコアコードを見ると、管理ルートを設定する方法は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>

新しいルート(cms上記のID )を設定し、モジュールを追加します。

これらの1つはMagento 2でこれを行う「正しい/好ましい」方法ですか?そうでない場合、2つの違いは何ですか?すなわち、いつあなたが他のものの上に1を使うでしょうか?

特定の問題を解決しないように頼みますが、正しい方法でルートを作成し、Magento 1モジュールに似た問題(ajaxライブラリ、セキュリティなどでのプル)が回避されるようにします。

回答:


23

違いはURLです。URLの構造は次のとおりです。 <areaFrontName>/<moduleFrontName>/<actionPath>/<actionName>

ルート "Adminhtml"には、areaFrontNameと同じmoduleFrontName "admin"があります。そのため、「adminhtml」ルートの下のすべてのパスはで始まりadmin/adminます。

より具体的なURLが必要な場合は、カタログのように特定のルートを使用する必要があります。カタログURLはすべてで始まり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回使用されています。

adminhtml / routes.xmlには50個のモジュールしかありませんが、24 + 31 = 55です。ヒント#1。

どのタイプのモジュールがどのタイプを使用するかという共通点を見つけようとしましたが、何も特定できないようです。そのため、ある時点で変更が導入されたため、2つのタイプのタイミングをチェックしました。残念なことに、それらのほとんどが9月中旬に新しい骨nを紹介するために最後に編集されたため、Githubの履歴機能を使用する必要があったため、これは非常に困難でした。

私はその後、いくつかのroutes.xmlファイル気づいたroute id="adminhtml"オプションが使用されても、使用before="Magento_Backend"例を参照、Magento_UrlRewriteのroutes.xmlファイルを。3つのバリアントの間に決定的な共通点は見当たりません。

私もチェックなど(M1ではなかったため、移植することができませんでしたが、M2のための新しい書かれた)新しいモジュール、AdvancedPricingImportExport統合MediaStorageEncryptionKeyいくつか使用しているがbefore="Magento_Backend"、いくつかない、それらはすべて使用<route id="adminhtml">タグ。これらのうち、のないbefore="Magento_Backend"ものは2015年2月に最後に変更され、そのタグを持つものはすべてその日以降に編集れました。

したがって、私の予備的な結論は、これがそれを行うための好ましい方法であるということです(Magento HQで内部的に明示的に決定されたかどうか);

<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が応答しました。これを行う好ましい方法については、彼の回答を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.