Magento 2 में एक व्यवस्थापक मार्ग की स्थापना


16

कोर 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 मॉड्यूल (अजाक्स लाइब्रेरी, सुरक्षा, आदि में खींच) जैसी समस्याओं से बचा जाता है।

जवाबों:


24

अंतर है उरलों में। Url की संरचना निम्नलिखित है: <areaFrontName>/<moduleFrontName>/<actionPath>/<actionName>

रूट "Adminhtml" में मॉड्यूलफ्रंटनाम "एडमिन" है, जो एरियाफ्रंटनाम के समान है। तो "adminhtml" मार्ग के तहत सभी पथ के साथ शुरू होगा admin/admin

यदि आप अधिक विशिष्ट यूआरएल चाहते हैं, तो आपको विशिष्ट मार्ग का उपयोग करना चाहिए, जैसे कैटलॉग करता है। कैटलॉग सभी के साथ शुरू होता है 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
क्या आईडी और फ्रंटनेम के नाम पर कोई स्पष्टीकरण है? क्या यह व्यवस्थापक क्षेत्र के लिए समान होना चाहिए? क्या इसे मॉड्यूल नाम का उपयोग करना चाहिए? आईडी से काम क्यों नहीं चल रहा है!
सर्गेई कोरज़ोव

5

मैं इस के साथ-साथ उदाहरणों के लिए देख रहा था कि कैसे एक adminHTML नियंत्रक जोड़ना है। मैंने कुछ शोध किया और यही मैंने पाया है।

जिस route id="adminhtml"तरह से कोर में 24 बार उपयोग किया जाता है।

जिस before="Magento_Backend"तरह से कोर में 31 बार उपयोग किया जाता है।

व्यवस्थापक / मार्ग के साथ केवल 50 मॉड्यूल हैं। path.xml लेकिन 24 + 31 = 55. संकेत # 1।

मैंने किस प्रकार के मॉड्यूल का उपयोग किस प्रकार के बीच एक सामान्य भाजक को खोजने की कोशिश की, लेकिन मैं किसी भी पहचान नहीं कर सकता। इसलिए शायद समय में परिवर्तन एक निश्चित बिंदु पर पेश किया गया था इसलिए मैंने दो प्रकारों पर समय की जांच की। दुर्भाग्य से यह काफी कठिन था क्योंकि उनमें से ज्यादातर को नए कलश को पेश करने के लिए मध्य-सितंबर को संपादित किया गया था, इसलिए मुझे जीथब के इतिहास समारोह का उपयोग करना पड़ा।

मैं तो कुछ routes.xml फ़ाइलों जहां देखा route id="adminhtml"विकल्प प्रयोग किया जाता है भी उपयोग करें before="Magento_Backend", उदाहरण के लिए देखें Magento_UrlRewrite के routes.xml फ़ाइल । मैं तीन वैरिएंट के बीच कोई निर्णायक समानता नहीं खोज सकता।

मैंने नए मॉड्यूल की भी जाँच की (जो M1 में नहीं थे और इसलिए उन्हें पोर्ट नहीं किया जा सकता था, लेकिन M2 के लिए नया लिखा गया था), जैसे कि AdvancedPricingImportExport , Integration , MediaStorage और Enc एन्क्रिप्शन Key और हालांकि कुछ उपयोग करते हैं before="Magento_Backend"और कुछ नहीं करते हैं, वे सभी का उपयोग करते हैं <route id="adminhtml">टैग। इन में से, बिना लोगों को before="Magento_Backend"पिछले फ़रवरी 2015 को बदल दिया गया, जबकि कि टैग के साथ लोगों को सभी संपादित किया गया के बाद उस तारीख।

इसलिए, मेरा प्रारंभिक निष्कर्ष यह है कि यह करने के लिए पसंदीदा तरीका है (या तो स्पष्ट रूप से Magento मुख्यालय में आंतरिक रूप से तय किया गया है या नहीं);

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

मैं इस पर मैगेंटो कोर देव की स्थिति को सुनना पसंद करूंगा, जाहिर है।

अद्यतन: एंटोन क्रिल ने जवाब दिया, ऐसा करने के पसंदीदा तरीके के लिए उनका जवाब देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.