Impostazione di una route di amministrazione in Magento 2


15

Guardando il codice principale di Magento 2, sembrano esserci due modi per impostare una route di amministrazione.

Il primo

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

è simile a Magento 1. Aggiungi il tuo modulo a un elenco di moduli nel adminhtmlpercorso e Magento lo controlla per te.

Il secondo

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

ti sta configurando un nuovo percorso (id cmssopra) e quindi aggiungendo il tuo modulo ad esso.

Uno di questi è il modo "giusto / preferito" per farlo in Magento 2? In caso contrario, quali sono le differenze tra i due? cioè quando useresti uno sopra l'altro?

Chiedere di non risolvere un problema specifico, ma di assicurarmi di creare i miei percorsi nel modo corretto e di evitare problemi simili ai moduli Magento 1 (inserimento di librerie Ajax, sicurezza, ecc.).

Risposte:


23

La differenza sta negli URL. L'URL ha la seguente struttura: <areaFrontName>/<moduleFrontName>/<actionPath>/<actionName>

Il percorso "Adminhtml" ha moduleFrontName "admin", come areaFrontName. Quindi inizieranno tutti i percorsi sotto il percorso "adminhtml" admin/admin.

Se vuoi avere un URL più specifico, dovresti usare un percorso specifico, come fa il catalogo. Tutti gli URL del catalogo iniziano con admin/catalog. Questo è il modo preferito.

Quindi la configurazione preferita è:

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

Si noti che before="Magento_Backend"non è necessario


3
ci sono spiegazioni sull'ID di denominazione e sul frontName? dovrebbe essere lo stesso per l'area di amministrazione? dovrebbe usare il nome del modulo? perché non funziona quando id! = frontName?
Sergey Korzhov,

4

Mi sono imbattuto anche in questo mentre cercavo esempi su come aggiungere un controller adminhtml. Ho fatto delle ricerche e questo è quello che ho trovato.

Il route id="adminhtml"modo in cui viene utilizzato 24 volte nel nucleo.

Il before="Magento_Backend"modo in cui viene utilizzato 31 volte nel core.

Esistono solo 50 moduli con adminhtml / route.xml ma 24 + 31 = 55. Suggerimento n. 1.

Ho cercato di trovare un denominatore comune tra quale tipo di moduli utilizza quale tipo, ma non riesco a identificarne nessuno. Quindi forse la modifica è stata introdotta in un determinato momento, quindi ho controllato i tempi sui due tipi. Purtroppo questo è stato piuttosto difficile poiché la maggior parte di loro è stata modificata l'ultima volta a metà settembre per introdurre le nuove urne, quindi ho dovuto usare la funzione di storia di Github.

Ho notato quindi alcuni file route.xml in cui route id="adminhtml"viene utilizzata l' opzione utilizzare anche il file before="Magento_Backend", vedi ad esempio il file route.xml di Magento_UrlRewrite . Non riesco a trovare alcun carattere comune tra le tre varianti.

Ho anche controllato i nuovi moduli (che non erano in M1 e quindi non potevano essere portati ma sono stati scritti nuovi per M2), come AdvancedPricingImportExport , Integration , MediaStorage e EncryptionKey e sebbene alcuni utilizzino before="Magento_Backend"e alcuni no, tutti usano il <route id="adminhtml">tag. Tra questi, quelli senza il before="Magento_Backend"sono stati modificati l'ultima volta nel febbraio 2015 mentre quelli con quel tag sono stati tutti modificati dopo quella data.

Quindi, la mia conclusione preliminare è che questo è il modo preferito per farlo (o esplicitamente deciso internamente al quartier generale di Magento o no);

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

Mi piacerebbe sentire la posizione dei dev core di Magento su questo, ovviamente.

AGGIORNAMENTO: Anton Kril ha risposto, vedi la sua risposta per il modo preferito per farlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.