Configurer une route d'administration dans Magento 2


15

En regardant le code principal de Magento 2, il semble y avoir deux façons de configurer une route d'administration.

La première

#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>

est similaire à Magento 1. Vous ajoutez votre module à une liste de modules dans l' adminhtmlitinéraire, et Magento le vérifie pour vous.

La deuxième

#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>

vous a mis en place une nouvelle route (id cmsci-dessus), puis en y ajoutant votre module.

Est-ce que l'une de ces méthodes est la "bonne / préférée" pour le faire dans Magento 2? Sinon, quelle est la différence entre les deux? c'est-à-dire quand utiliseriez-vous l'un sur l'autre?

Demander de ne pas résoudre un problème spécifique, mais de s'assurer que je crée mes itinéraires de la bonne manière et que les problèmes similaires aux modules Magento 1 (extraction des bibliothèques ajax, sécurité, etc.) sont évités.

Réponses:


23

La différence est dans les URL. L'URL a la structure suivante: <areaFrontName>/<moduleFrontName>/<actionPath>/<actionName>

La route "Adminhtml" a moduleFrontName "admin", identique à areaFrontName. Ainsi, tous les chemins sous la route "adminhtml" commenceront par admin/admin.

Si vous voulez avoir une URL plus spécifique, vous devez utiliser un itinéraire spécifique, comme le fait le catalogue. Les URL de catalogue commencent toutes par admin/catalog. C'est la voie préférée.

La configuration préférée est donc:

<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>

Notez que ce before="Magento_Backend"n'est pas nécessaire


3
y a-t-il des explications sur la dénomination ID et frontName? devrait-il en être de même pour la zone d'administration? Doit-il utiliser le nom du module? pourquoi cela ne fonctionne pas lorsque id! = frontName?
Sergey Korzhov

4

Je suis également tombé sur cela en recherchant des exemples sur la façon d'ajouter un contrôleur adminhtml. J'ai fait quelques recherches et c'est ce que j'ai trouvé.

La route id="adminhtml"voie est utilisée 24 fois dans le noyau.

La before="Magento_Backend"voie est utilisée 31 fois dans le noyau.

Il n'y a que 50 modules avec un adminhtml / routes.xml mais 24 + 31 = 55. Indice # 1.

J'ai essayé de trouver un dénominateur commun entre quel type de modules utilise quel type, mais je n'arrive pas à en identifier. Alors peut-être que le changement a été introduit à un certain moment, j'ai donc vérifié le timing sur les deux types. Malheureusement, cela a été assez difficile car la plupart d'entre eux ont été modifiés pour la dernière fois à la mi-septembre pour présenter les nouvelles urnes, j'ai donc dû utiliser la fonction d'historique de Github.

J'ai ensuite remarqué que certains fichiers routes.xml où l' route id="adminhtml"option est utilisée utilisent également le before="Magento_Backend", voir par exemple le fichier routes.xml de Magento_UrlRewrite . Je n'arrive pas à trouver de points communs concluants entre les trois variantes.

J'ai également vérifié les nouveaux modules (qui n'étaient pas dans M1 et ne pouvaient donc pas être portés mais ont été écrits pour M2), tels que AdvancedPricingImportExport , Integration , MediaStorage et EncryptionKey et bien que certains utilisent le before="Magento_Backend"et d'autres pas, ils utilisent tous la <route id="adminhtml">balise. Parmi ceux-ci, ceux sans le before="Magento_Backend"dernier ont été modifiés en février 2015 tandis que ceux avec ce tag ont tous été modifiés après cette date.

Donc, ma conclusion préliminaire est que c'est la façon préférée de le faire (soit explicitement décidé en interne au siège de Magento ou non);

<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>

J'adorerais entendre la position du développeur principal de Magento à ce sujet, évidemment.

MISE À JOUR: Anton Kril a répondu, voir sa réponse pour la façon préférée de le faire.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.