Глядя на основной код 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>
Вам нужно настроить новый маршрут (идентификатор cms
выше), а затем добавить к нему свой модуль.
Является ли один из них «правильным / предпочтительным» способом сделать это в Magento 2? Если нет, то чем они отличаются? т.е. когда бы вы использовали один поверх другого?
Попросить не решить конкретную проблему, а убедиться, что я создаю свои маршруты правильным образом и что проблем, подобных модулям Magento 1 (использование библиотек ajax, безопасность и т. Д.), Избегают.
Я тоже сталкивался с этим, когда искал примеры, как добавить контроллер adminhtml. Я провел некоторое исследование, и это то, что я нашел.
route id="adminhtml"
Способ используется 24 раз в сердцевине.before="Magento_Backend"
Способ используется 31 раз в ядре.Есть только 50 модулей с adminhtml / rout.xml, но 24 + 31 = 55. Подсказка # 1.
Я пытался найти общий знаменатель между тем, какой тип модулей использует какой тип, но я не могу определить, какой из них. Так что, возможно, изменение было внесено в определенный момент времени, поэтому я проверил выбор времени для этих двух типов. К сожалению, это было довольно сложно, так как большинство из них были в последний раз отредактированы в середине сентября, чтобы ввести новые урны, поэтому мне пришлось использовать функцию истории Github.
Затем я заметил, что некоторые файлы rout.xml, в которых используется эта
route id="adminhtml"
опция, также используютbefore="Magento_Backend"
, например , файл Magento_UrlRewrite route.xml . Я не могу найти каких-либо убедительных сходств между этими тремя вариантами.Я также проверил новые модули (которых не было в M1, и поэтому они не могли быть перенесены, но были написаны как новые для M2), такие как AdvancedPricingImportExport , Integration , MediaStorage и EncryptionKey, и хотя некоторые используют,
before="Magento_Backend"
а некоторые нет, все они используют<route id="adminhtml">
тег. Среди них, те, у кого неbefore="Magento_Backend"
было, были в последний раз изменены в феврале 2015 года, а те, у которых был этот тег, были отредактированы после этой даты.Итак, мой предварительный вывод заключается в том, что это предпочтительный способ сделать это (либо явно решено внутренне в штаб-квартире Magento, либо нет);
Мне бы очень хотелось услышать позицию главного разработчика Magento по этому вопросу.
ОБНОВЛЕНИЕ: Антон Криль ответил, см. Его ответ для предпочтительного способа сделать это.
источник