Magento 2 URL में आरक्षित शब्दों का उपयोग करना


11

क्या मानक रूटिंग का उपयोग करके, Magento 2 में एक मॉड्यूल बनाना संभव है, जो URL के रूप में प्रतिक्रिया करता है

http://magento.example.com/namespace_module/return/index

वह है - एक URL जहां दूसरा पैरामीटर एक PHP आरक्षित कीवर्ड है। ऊपर के साथ समस्या यह है कि एक PHP नियंत्रक वर्ग नाम बना है

Namespace\Module\Controller\Return\Index

और Returnनाम स्थान में अवैध PHP है। मुझे पता है कि URL का अंतिम पैरामीटर (पारंपरिक रूप से कार्रवाई कहा जाता है) एक आरक्षित कीवर्ड था

http://magento.example.com/namespace_module/foo/return

कि Magento मुझे एक नियंत्रक वर्ग नाम बनाने देगा

Namespace\Module\Controller\Foo\ReturnAction

हालांकि, यह दूसरे पैरामीटर के लिए काम नहीं करता है।

वहाँ मानक Magento 2 मार्ग तकनीकों का उपयोग कर ऐसा करने के लिए एक रास्ता है?

यदि नहीं, तो क्या इस व्यवहार को प्राप्त करने के लिए एक कस्टम राउटर ऑब्जेक्ट को इंजेक्ट करने के लिए आमतौर पर सबसे अच्छा अभ्यास माना जाता है, या कोई अन्य तकनीक जो मुझे इसके चारों ओर जाने देती है? (एक afterप्लगइन पर Magento\Framework\App\Router\ActionList?)

जवाबों:


7

मैं एक प्लगइन जोड़ने के लिए समाप्त हो गया Magento\Framework\App\Router\ActionList

<!-- File: app/code/Package/Namespace/etc/di.xml -->
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\App\Router\ActionList">
        <plugin name="package_module_magento_framework_app_router_actionlist" type="Package\Module\Plugin\Magento\Framework\App\Router\ActionList"/>
    </type>
</config>

और फिर विधि के $namespaceपैरामीटर के साथ fiddledget

#File: app/code/Package/Module/Plugin/Magento/Framework/App/Router/ActionList.php
public function beforeGet($subject, $module, $area, $namespace, $action)
{
    if($namespace === 'return')
    {
        $namespace = 'returnaction';
    }
    return [$module, $area, $namespace, $action];
}

इसने मुझे एक वर्ग का नाम दिया

Package\Module\Controller\ReturnAction\Index

सुनिश्चित नहीं है कि यह कितना अच्छा विचार है, इसलिए खरीदार सावधान रहें, आदि।


यह अच्छा और आसान लगता है। विशेष रूप से, क्योंकि इसे सभी php आरक्षित शब्दों में विस्तारित किया जा सकता है, उसी तरह से कार्रवाई नामों को कार्रवाई कक्षाओं में मैप किया जाता है। कस्टम राउटर बनाने के लिए एक विकल्प होगा, लेकिन इसके लिए अधिक कोड की आवश्यकता होती है।
मारीस

2
केवल एक दो टिप्पणियाँ: 1) यह किसी भी मॉड्यूल के लिए नामस्थान को बदल देगा जो 'वापसी' नियंत्रक का उपयोग करने की कोशिश करता है। जब तक आप जानबूझकर 'कैटचेल' नहीं बना रहे हों, तब तक अपने मॉड्यूल से मिलान करने के लिए $ मॉड्यूल पैरामीटर की जांच करना सबसे अच्छा हो सकता है। 2) यदि हम नामकरण समता को बनाए रखने की कोशिश करने जा रहे हैं, तो लौटे $ नामस्थान शायद 'रिटर्नकंट्रोलर' होने चाहिए - जो फिर रिटर्नकंट्रोलर नेमस्पेस / फाइलपाथ की खोज करेंगे। यह तब लोड होगा \Namespace\Module\Controller\ReturnController\Index- जो अधिक सटीक है।
जेरेमी रिम्पो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.