Thiết lập Tuyến quản trị trong Magento 2


15

Nhìn vào mã Magento 2 cốt lõi, dường như có hai cách để thiết lập tuyến quản trị.

Đầu tiên

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

tương tự như Magento 1. Bạn thêm mô-đun của mình vào danh sách các mô-đun trong adminhtmltuyến và Magento sẽ kiểm tra nó cho bạn.

Thư hai

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

bạn có thiết lập tuyến mới (id cmsở trên) không, rồi thêm mô-đun của bạn vào đó.

Đây có phải là một trong những cách "đúng / ưa thích" để làm điều này trong Magento 2 không? Nếu không, sự khác biệt giữa hai là gì? tức là khi nào bạn sẽ sử dụng cái này hơn cái kia?

Yêu cầu không giải quyết một vấn đề cụ thể, nhưng để đảm bảo rằng tôi đang tạo các tuyến đường của mình theo đúng cách và các vấn đề tương tự như các mô-đun Magento 1 (kéo vào các thư viện ajax, bảo mật, v.v.) đều tránh được.

Câu trả lời:


23

Sự khác biệt là trong url. Url có cấu trúc như sau: <areaFrontName>/<moduleFrontName>/<actionPath>/<actionName>

Tuyến "adminhtml" có "admin" moduleFrontName, giống như areaFrontName. Vì vậy, tất cả các đường dẫn trong tuyến đường "adminhtml" sẽ bắt đầu bằng admin/admin.

Nếu bạn muốn có một url cụ thể hơn, bạn nên sử dụng tuyến đường cụ thể, giống như danh mục thực hiện. Danh mục url tất cả bắt đầu với admin/catalog. Đây là cách ưa thích.

Vì vậy, cấu hình ưa thích là:

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

Lưu ý rằng before="Magento_Backend"không cần thiết


3
Có bất kỳ giải thích về việc đặt tên ID và frontName không? nó nên giống nhau cho khu vực quản trị? Có nên sử dụng tên mô-đun? tại sao nó không hoạt động khi id! = frontName?
Sergey Korzhov

4

Tôi cũng đã xem qua điều này trong khi tìm kiếm các ví dụ về cách thêm bộ điều khiển adminhtml. Tôi đã làm một số nghiên cứu và đây là những gì tôi đã tìm thấy.

Các route id="adminhtml"cách được sử dụng 24 lần trong lõi.

Các before="Magento_Backend"cách được sử dụng 31 lần trong lõi.

Chỉ có 50 mô-đun với adminhtml / Rout.xml nhưng 24 + 31 = 55. Gợi ý # 1.

Tôi đã cố gắng tìm mẫu số chung giữa loại mô-đun sử dụng loại nào, nhưng dường như tôi không thể xác định được mẫu nào. Vì vậy, có thể thay đổi đã được giới thiệu tại một thời điểm nhất định vì vậy tôi đã kiểm tra thời gian trên hai loại. Thật không may, điều này khá khó khăn vì hầu hết trong số chúng đã được chỉnh sửa vào giữa tháng chín để giới thiệu chiếc bình mới nên tôi phải sử dụng chức năng lịch sử của Github.

Sau đó, tôi nhận thấy một số tệp Rout.xml trong đó route id="adminhtml"tùy chọn được sử dụng cũng sử dụng before="Magento_Backend", xem ví dụ về tệp Rout.xml của Magento_UrlRewrite . Tôi dường như không thể tìm thấy bất kỳ điểm tương đồng kết luận nào giữa ba biến thể.

Tôi cũng đã kiểm tra các module mới (mà không phải là trong M1 và do đó không thể được chuyển nhưng được viết mới cho M2), chẳng hạn như AdvancedPricingImportExport , Integration , MediaStorageEncryptionKey và mặc dù một số sử dụng các before="Magento_Backend"và một số thì không, tất cả họ đều sử dụng các <route id="adminhtml">thẻ. Trong số này, những cái không có before="Magento_Backend"thay đổi cuối cùng vào tháng 2 năm 2015 trong khi những cái có thẻ đó đều được chỉnh sửa sau ngày đó.

Vì vậy, kết luận sơ bộ của tôi là đây là cách ưa thích để làm điều đó (có thể quyết định rõ ràng về nội bộ tại Magento HQ hay không);

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

Rõ ràng, tôi rất thích nghe vị trí của nhà phát triển Magento về vấn đề này.

CẬP NHẬT: Anton Kril trả lời, xem câu trả lời của anh ấy cho cách ưa thích để làm điều này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.