Magento 2'de Yönetici Rotası Oluşturma


16

Çekirdek Magento 2 koduna bakıldığında, bir yönetici yolu oluşturmanın iki yolu var gibi görünüyor .

İlk

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

modülünüzü adminhtmlrotadaki modül listesine eklersiniz ve Magento bunu sizin için kontrol eder.

İkinci

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

Eğer bir kurma etti yeni rota (id cmsüstünde) ve sonra buna Modülünüzü ekledi.

Bunlardan biri bunu Magento 2'de yapmanın "doğru / tercih edilen" yolu mu? Değilse, ikisi arasındaki fark nedir? yani birini ne zaman diğerinin üzerinde kullanırsınız?

Belirli bir sorunu çözmemeyi istemiyorum, ancak rotalarımı doğru şekilde oluşturduğumdan ve Magento 1 modüllerine (ajax kütüphanelerini, güvenliği vb. Çekerek) benzer sorunlardan kaçınılmasını sağlamak.

Yanıtlar:


24

Fark URL'lerdir. URL aşağıdaki yapıya sahiptir: <areaFrontName>/<moduleFrontName>/<actionPath>/<actionName>

"Adminhtml" yolunun, fieldFrontName ile aynı moduleFrontName "admin" vardır. Böylece "adminhtml" yolu altındaki tüm yollar ile başlayacaktır admin/admin.

Daha spesifik bir URL'ye sahip olmak istiyorsanız, katalogun yaptığı gibi belirli bir rota kullanmalısınız. Katalog URL'lerinin tümü ile başlar admin/catalog. Tercih edilen yol budur.

Bu yüzden tercih edilen yapılandırma:

<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"Gerekli olmadığını unutmayın


3
ID ve frontName adlarıyla ilgili açıklamalar var mı? yönetici alanı için aynı mı olmalı? modül adını kullanmalı mı? id! = frontName olduğunda neden çalışmıyor?
Sergey Korzhov

5

Ben nasıl bir adminhtml denetleyicisi eklemek için örnekler ararken de bu rastladı. Biraz araştırma yaptım ve bulduğum da buydu.

route id="adminhtml"Yol çekirdeğin 24 kez kullanılır.

before="Magento_Backend"Yol çekirdeğin 31 kez kullanılır.

Adminhtml / route.xml içeren yalnızca 50 modül vardır, ancak 24 + 31 = 55. İpucu # 1.

Hangi tür modüllerin hangi türü kullandığı arasında ortak bir payda bulmaya çalıştım, ancak herhangi birini tanımlayamıyorum. Belki de değişiklik belli bir zamanda ortaya çıktı, bu yüzden iki tipte zamanlamayı kontrol ettim. Ne yazık ki bu oldukça zordu çünkü çoğu son Eylül ayının ortasında yeni urn'ları tanıtmak için düzenlendi, bu yüzden Github'un tarih işlevini kullanmak zorunda kaldım.

Sonra bazı routes.xml dosyalarını fark route id="adminhtml"seçenek kullanıldığında da kullanabilir before="Magento_Backend", örneğin bakınız Magento_UrlRewrite en routes.xml dosyası . Üç varyant arasında kesin bir benzerlik bulamıyorum.

Ayrıca AdvancedPricingImportExport , Integration , MediaStorage ve EncryptionKey gibi yeni modülleri (M1'de bulunmayan ve bu nedenle taşınamayan ancak M2 için yeni yazılan) kontrol ettim ve bazıları kullanmıyor ve bazıları kullanmıyor, before="Magento_Backend"hepsi kullanıyor <route id="adminhtml">etiketi. Bunlar arasında en before="Magento_Backend"son Şubat 2015'te değiştirilmemiş olanlar, o etikete sahip olanların tümü bu tarihten sonra düzenlenmiştir .

Yani, benim ilk sonucum, bunu yapmanın tercih edilen yolu olduğu (ya açıkça Magento Genel Merkezinde kararlaştırılmış olsun ya da olmasın);

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

Magento core dev'in bu konudaki pozisyonunu duymak isterim.

GÜNCELLEME: Anton Kril yanıt verdi, bunu yapmanın tercih edilen yolu için cevabına bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.