การตั้งค่าเส้นทางผู้ดูแลระบบใน Magento 2


15

ดูรหัสหลักของ 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>

คุณได้ตั้งค่าเส้นทางใหม่ (ID cmsด้านบน) แล้วเพิ่มโมดูลของคุณลงไป

เป็นหนึ่งในวิธีที่ "ถูกต้อง / เป็นที่ต้องการ" ใน Magento 2 หรือไม่? ถ้าไม่แตกต่างกันระหว่างสองคนนี้ คือเมื่อไหร่ที่คุณจะใช้อันอื่น?

การขอไม่ให้แก้ปัญหาเฉพาะเจาะจง แต่เพื่อให้แน่ใจว่าฉันกำลังสร้างเส้นทางของฉันในวิธีที่ถูกต้องและปัญหาที่คล้ายกับโมดูล Magento 1 (การดึงไลบรารี ajax, การรักษาความปลอดภัย ฯลฯ ) จะหลีกเลี่ยง

คำตอบ:


23

ความแตกต่างอยู่ใน URL URL มีโครงสร้างดังต่อไปนี้: <areaFrontName>/<moduleFrontName>/<actionPath>/<actionName>

เส้นทาง "Adminhtml" มี moduleFrontName "admin" เหมือนกับ areaFrontName ดังนั้นทุกเส้นทางใต้ "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 และชื่อหน้าหรือไม่? มันควรจะเหมือนกันสำหรับพื้นที่ผู้ดูแลระบบ? ควรใช้ชื่อโมดูลหรือไม่ ทำไมมันไม่ทำงานเมื่อ id! = frontName?
Sergey Korzhov

4

ฉันเจอสิ่งนี้ด้วยในขณะที่ค้นหาตัวอย่างวิธีเพิ่มตัวควบคุม adminhtml ฉันทำวิจัยและนี่คือสิ่งที่ฉันพบ

route id="adminhtml"วิธีที่จะใช้ 24 ครั้งในแกน

before="Magento_Backend"วิธีที่จะใช้ 31 ครั้งในแกน

มีโมดูลเพียง 50 โมดูลที่มี adminhtml / route.xml แต่ 24 + 31 = 55 คำแนะนำ # 1

ฉันพยายามค้นหาตัวหารร่วมระหว่างโมดูลประเภทใดที่ใช้ประเภทใด แต่ฉันไม่สามารถระบุได้ ดังนั้นอาจมีการแนะนำการเปลี่ยนแปลง ณ เวลาใดเวลาหนึ่งดังนั้นฉันจึงตรวจสอบเวลาสำหรับทั้งสองประเภท น่าเสียดายที่นี่ค่อนข้างยากเนื่องจากพวกเขาส่วนใหญ่ได้รับการแก้ไขเมื่อกลางเดือนกันยายนเพื่อแนะนำโกศใหม่ดังนั้นฉันจึงต้องใช้ฟังก์ชั่นประวัติศาสตร์ของ Github

จากนั้นผมก็สังเกตเห็นไฟล์ routes.xml บางที่route id="adminhtml"ตัวเลือกที่ถูกนำมาใช้ยังใช้before="Magento_Backend"ดูตัวอย่างไฟล์ routes.xml Magento_UrlRewrite ของ ฉันไม่สามารถหาข้อสรุปร่วมกันระหว่างตัวแปรทั้งสามได้

ฉันยังตรวจสอบโมดูลใหม่ (ซึ่งไม่ได้อยู่ใน M1 ดังนั้นจึงไม่สามารถพอร์ตได้ แต่เขียนใหม่สำหรับ M2) เช่นAdvancedPricingImportExport , Integration , MediaStorageและEncryptionKeyและถึงแม้ว่าบางคนใช้before="Magento_Backend"และบางคนก็ไม่ได้ใช้<route id="adminhtml">แท็ก ในบรรดาสิ่งเหล่านี้รายการที่ไม่มีการbefore="Magento_Backend"เปลี่ยนแปลงล่าสุดในเดือนกุมภาพันธ์ 2558 ในขณะที่รายการที่มีแท็กนั้นถูกแก้ไขหลังจากวันที่ดังกล่าว

ดังนั้นข้อสรุปเบื้องต้นของฉันคือว่านี่เป็นวิธีที่เหมาะสมที่จะทำ (ไม่ว่าจะตัดสินใจโดยชัดแจ้งที่สำนักงานใหญ่ของวีโอไอพีหรือไม่ก็ตาม);

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

ฉันชอบที่จะได้ยินตำแหน่งของผู้พัฒนาหลักวีโอไอพีในเรื่องนี้อย่างชัดเจน

UPDATE: Anton Kril ตอบกลับโปรดดูคำตอบของเขาสำหรับวิธีที่ต้องการในการทำสิ่งนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.