Mirando el código central de Magento 2, parece que hay dos formas de configurar una ruta de administrador.
El primero
#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>
es similar a Magento 1. Agrega su módulo a una lista de módulos en la adminhtml
ruta, y Magento lo comprueba por usted.
El segundo
#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>
tiene que configurar una nueva ruta (id cms
arriba) y luego agregarle su módulo.
¿Es una de estas la forma "correcta / preferida" de hacer esto en Magento 2? Si no, ¿cuál es la diferencia entre los dos? es decir, ¿cuándo usarías uno sobre el otro?
Pidiendo no resolver un problema específico, pero para asegurarme de que estoy creando mis rutas de la manera correcta y que se evitan problemas similares a los módulos de Magento 1 (extracción de bibliotecas ajax, seguridad, etc.).
Me encontré con esto también mientras buscaba ejemplos de cómo agregar un controlador adminhtml. Investigué un poco y esto es lo que he encontrado.
El
route id="adminhtml"
camino se usa 24 veces en el núcleo.El
before="Magento_Backend"
camino se usa 31 veces en el núcleo.Solo hay 50 módulos con adminhtml / routes.xml pero 24 + 31 = 55. Sugerencia n. ° 1.
Traté de encontrar un denominador común entre qué tipo de módulos usa cada tipo, pero parece que no puedo identificar ninguno. Entonces, tal vez el cambio se introdujo en un momento determinado, así que verifiqué la sincronización de los dos tipos. Desafortunadamente, esto fue bastante difícil ya que la mayoría de ellos fueron editados por última vez a mediados de septiembre para presentar las nuevas urnas, así que tuve que usar la función de historia de Github.
Luego noté que algunos archivos routes.xml donde
route id="adminhtml"
se usa la opción también usan elbefore="Magento_Backend"
, vea por ejemplo el archivo routes.xml de Magento_UrlRewrite . Parece que no puedo encontrar ninguna coincidencia concluyente entre las tres variantes.También verifiqué los nuevos módulos (que no estaban en M1 y, por lo tanto, no se podían portar, pero se escribieron nuevos para M2), como AdvancedPricingImportExport , Integration , MediaStorage y EncryptionKey y aunque algunos usan el
before="Magento_Backend"
y otros no, todos usan la<route id="adminhtml">
etiqueta Entre estos, los que nobefore="Magento_Backend"
tenían el último se cambiaron en febrero de 2015, mientras que los que tenían esa etiqueta se editaron después de esa fecha.Entonces, mi conclusión preliminar es que esta es la forma preferida de hacerlo (ya sea explícitamente decidido internamente en Magento HQ o no);
Me encantaría escuchar la posición del desarrollador principal de Magento sobre esto, obviamente.
ACTUALIZACIÓN: Anton Kril respondió, vea su respuesta para la forma preferida de hacer esto.
fuente