Magento 2 बीटा में सामने के अंत में सत्र संदेश कैसे दिखाएं


12

मैं अपने Magento 2 मॉड्यूल में एक त्रुटि या सफलता संदेश दिखाना चाहता हूं। मैंने क्लास के नाम के साथ अपने फ्रंट-एंड कंट्रोलर को बढ़ाया है \Magento\Framework\App\Action\Action। फिर मैं निम्नलिखित कोड का उपयोग करके होम पेज पर क्लाइंट को रीडायरेक्ट करता हूं

$this->messageManager->addError($SomeMessage);
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath($base_path);

सब कुछ ठीक काम करता है लेकिन यह लाइन कभी भी त्रुटि नहीं दिखाती है

$this->messageManager->addError($SomeMessage);

क्या आपको स्टोरफ्रंट या एडमिन पैनल पर संदेश दिखाना है?
कांडी

मैं स्टोरफ्रंट पर संदेश दिखाना चाहता हूं
शहीर अली

जवाबों:


7

मुझे Magento2 बीटा स्रोत में प्रदर्शन संदेश से संबंधित समस्या का सामना करना पड़ा है। डिफ़ॉल्ट प्रदर्शन त्रुटि और सफलता संदेश द्वारा कुछ स्रोत में लेकिन कुछ मामले में यह प्रदर्शित नहीं होता है तो नीचे दिए चरणों का पालन करें।

चरण 1: मैंने Darsh \ Crud \ Block \ Message.php में अपने कस्टम मॉड्यूल में Message.php फ़ाइल बनाई है


नाम स्थान Darsh \ Crud \ Block;

वर्ग संदेश \ Magento \ फ्रेमवर्क \ View \ Element \ संदेश बढ़ाता है {

    सार्वजनिक समारोह __construct (
        \ Magento \ Framework \ View \ Element \ टेम्पलेट \ प्रसंग $ संदर्भ,
        \ Magento \ Framework \ Message \ Factory $ messageFactory,
        \ Magento \ Framework \ Message \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ संदेश \ ManagerInterface $ संदेश प्रबंधक,       
        सरणी $ डेटा = []
    ) {
        माता-पिता :: __ निर्माण (
            $ संदर्भ,
            $ MessageFactory,
            $ CollectionFactory,
            $ MessageManager,
            $ डेटा
        );       
    }

    संरक्षित कार्य _prepareLayout ()
    {
        $ This-> addMessages ($ this-> messageManager-> getMessages (सही));       
        वापसी माता-पिता :: _ तैय्यारी करें ();
    }

}

चरण 2: Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml में हैंडलर में संदेश ब्लॉक जोड़ा गया

   <referenceContainer name="page.messages">
        <block class="Darsh\Crud\Block\Message" name="darsh.crud.message" />
    </referenceContainer>

कृपया लेआउट हैंडल के लिए टैग <> खोलना और बंद करना जोड़ें।

अब आप Darsh \ Crud \ Controller \ Index \ Form में जोड़े गए अपने कस्टम संदेश को देख सकते हैं।

यदि आपको किसी समस्या का सामना करना पड़ता है, तो कृपया उदाहरण मॉड्यूल https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git पर देखें


कुछ संशोधनों के बाद मुझे परिणाम मिले :)
शहीर अली

7

लेआउट फ़ाइल में मैंने नीचे दिए गए कोड का उपयोग किया है। अब मुझे संदेश मिला है

<referenceContainer name="page.messages">            
    <block class="Magento\Framework\View\Element\Template" name="ajax.message.placeholder" template="Magento_Theme::html/messages.phtml"/>
    <block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
</referenceContainer>


1
धन्यवाद @ नवीन। मेरे कस्टम मॉड्यूल में Magento 2 में ठीक काम करता है
अंकित शाह

6

मुझे एक ही समस्या का सामना करना पड़ा है और मैं इसे अपनी लेआउट फ़ाइल में निम्नलिखित जोड़कर ठीक कर पाया:

<body>
    <!-- your layout content -->
    <referenceContainer name="page.messages">
        <block class="Magento\Framework\View\Element\Messages" name="messages" as="messages"/>
    </referenceContainer>
</body>

इसे ठीक करना चाहिए;)


2

क्या आपने कोड की अपनी अंतिम पंक्ति लौटाने की कोशिश की है?

return $resultRedirect->setPath($base_path);

वास्तविक addErrorफ़ंक्शन ठीक दिखता है जब तक कि $SomeMessageचर खाली नहीं होता, क्या आपने उसे चेक किया है?

यदि वह विफल रहता है, तो आप _redirectइसके बजाय फ़ंक्शन का उपयोग करके पुनर्निर्देशित करने का प्रयास कर सकते हैं:

$this->_redirect('*/*/');

हो सकता है कि resultRedirectफ़ंक्शन संदेश सत्र को साफ़ कर दे, ताकि आपका संदेश कभी प्रदर्शित न हो।


2

हां, मैंने $ resultRedirect ऑब्जेक्ट के साथ संदेश का उपयोग किया है

$ ResultRedirect-> setUrl ($ इस -> _ रीडायरेक्ट ( 'crud / सूचकांक / प्रपत्र'));

कृपया नीचे नियंत्रक कोड देखें

नाम स्थान Darsh \ Crud \ Controller \ Index;

Magento \ Framework \ App \ Filesystem \ DirectoryList का उपयोग करें;

वर्ग पोस्ट \ Magento \ संपर्क \ नियंत्रक \ Index \
// क्लास पोस्ट का विस्तार \ Magento \ फ्रेमवर्क \ App \ Action \ Action {


    सार्वजनिक कार्य निष्पादन () {
        $ डेटा = $ यह-> getRequest () -> getPostValue ();

        अगर ($ डेटा) {
            इस $ -> _ रीडायरेक्ट ( 'crud / सूचकांक / प्रपत्र');
            वापसी;
        }

        $ resultRedirect = $ this-> resultRedirectFactory-> create ();
        प्रयत्न {
            $ मॉडल = $ यह -> _ objectManager-> create ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['छवि'] ['नाम']) और& $ _FILES ['छवि'] ['नाम']! = '' ') {
                प्रयत्न {
                    $ अपलोडर = $ यह -> _ objectManager-> create ('\ Magento \ MediaStorage \ Model \ File \ Uploader', array ('fileId' => 'image'));
                    $ अपलोडर-> setAllowedExtensions (सरणी ('jpg', 'jpeg', 'gif', 'png'));
                    $ Uploader-> setAllowRenameFiles (सही);
                    $ Uploader-> setFilesDispersion (सही);
                    $ MediaDirectory = $ यह -> _ objectManager-> get ('Magento \ Framework \ Filesystem')
                            -> getDirectoryRead (DirectoryList :: मीडिया);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ परिणाम = $ अपलोडर-> सहेजें ($ MediaDirectory-> getAbsolutePath ('bannerslider / images'));
                    सेट नहीं ($ परिणाम [ 'tmp_name']);
                    सेट नहीं ($ परिणाम [ 'पथ']);
                    $ डेटा ['छवि'] = $ परिणाम ['फ़ाइल'];
                } पकड़ (अपवाद $ ई) {
                    $ डेटा ['छवि'] = $ _FILES ['छवि'] ['नाम'];
                }
            } और अगर (isset ($ डेटा ['इमेज'] ['डिलीट'])) {
                $ डेटा ['छवि'] = '';
            } और अगर (isset ($ डेटा ['छवि'] ['मूल्य'])) {
                $ डेटा ['छवि'] = $ डेटा ['छवि'] ['मूल्य'];
            }

            $ मॉडल> ​​setData ($ डेटा);
            $ मॉडल> ​​setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> बचाने ();
            प्रयत्न {
                $ मॉडल> ​​सहेजें ();
                $ This-> messageManager-> addSuccess (
                        __ ('अपनी टिप्पणियों और सवालों के साथ हमसे संपर्क करने के लिए धन्यवाद। हम बहुत जल्द ही आपको जवाब देंगे।'
                );
                // $ इस -> _ रीडायरेक्ट ( 'crud / सूचकांक / प्रपत्र');
                //वापसी;
            } पकड़ (\ अपवाद $ ई) {
                $ This-> messageManager-> addError (
                        __ (हम आपके अनुरोध को अभी संसाधित कर सकते हैं। क्षमा करें, यह \ _ "हम सब जानते हैं।));
                // $ इस -> _ रीडायरेक्ट ( 'crud / सूचकांक / प्रपत्र');
                //वापसी;
            }
        } पकड़ (\ अपवाद $ ई) {
            $ This-> messageManager-> addError (
                    __ (हम अभी आपके अनुरोध को संसाधित नहीं कर सकते हैं। क्षमा करें, यह हम सब जानते हैं। '
            );
            // $ इस -> _ रीडायरेक्ट ( 'crud / सूचकांक / प्रपत्र');
            //वापसी;
        }

        $ ResultRedirect-> setUrl ($ इस -> _ रीडायरेक्ट ( 'crud / सूचकांक / प्रपत्र'));

        $ परिणाम वापस करें अप्रत्यक्ष;
    }

}

धन्यवाद।


2

XDEBUG का उपयोग करने का प्रयास करें, अपने कंट्रोलर एक्शन में ब्रेक प्वाइंट सेट करें। शायद यह डुप्लिकेट पुनर्निर्देशित किया गया था और प्रबंधक में खोए हुए संदेश बना रहा था।

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