Come mostrare i messaggi di sessione al front-end in magento 2 beta


12

Voglio mostrare un messaggio di errore o di successo nel mio modulo magento 2. Ho esteso il mio controller front-end con il nome della classe \Magento\Framework\App\Action\Action. Quindi reindirizzo il client alla home page utilizzando il seguente codice

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

Tutto funziona bene ma questa riga non stampa mai l'errore

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

Devi mostrare i messaggi sullo storefront o nel pannello di amministrazione?
KAndy,

Voglio mostrare i messaggi sullo storefront
Shaheer Ali,

Risposte:


7

Ho riscontrato un problema relativo alla visualizzazione del messaggio nella fonte Magento2 Beta. In alcune fonti, per impostazione predefinita, vengono visualizzati errori e messaggi di successo, ma in alcuni casi non vengono visualizzati, quindi seguire i passaggi seguenti.

Passaggio 1: ho creato il file Message.php nel mio modulo personalizzato in Darsh \ Crud \ Block \ Message.php


spazio dei nomi Darsh \ Crud \ Block;

class Message extends \ Magento \ Framework \ View \ Element \ Messages {

    funzione pubblica __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Magento \ Framework \ Message \ Factory $ messageFactory,
        \ Magento \ Framework \ Message \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ ManagerInterface $ messageManager,       
        array $ data = []
    ) {
        parent :: __ construct (
            $ Contesto,
            $ MessageFactory,
            $ CollectionFactory,
            $ MessageManager,
            $ dati
        );       
    }

    funzione protetta _prepareLayout ()
    {
        $ This-> addMessages ($ this-> messageManager-> getMessages (true));       
        return parent :: _ preparLayout ();
    }

}

Passaggio 2: aggiunto il blocco messaggi al handeler in Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml

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

Aggiungi il tag di apertura e chiusura <> per l'handle del layout.

Ora puoi vedere il tuo messaggio personalizzato aggiunto in Darsh \ Crud \ Controller \ Index \ Form.

In caso di problemi, consultare il modulo di esempio su https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git


Dopo alcune modifiche ho ottenuto i risultati :)
Shaheer Ali,

7

Nel file di layout ho usato il seguente codice. ora ho il messaggio in frontend.

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

Grazie Marius
Naveenbos il

1
Grazie @Naveen. Funziona bene in Magento 2 nel mio modulo personalizzato
Ankit Shah,

6

Ho riscontrato lo stesso problema e sono stato in grado di risolverlo aggiungendo quanto segue nel mio file di layout:

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

Questo dovrebbe risolverlo;)


2

Hai provato a restituire l'ultima riga del codice?

return $resultRedirect->setPath($base_path);

La addErrorfunzione attuale sembra a meno che la $SomeMessagevariabile non sia vuota, hai controllato anche quello?

Se fallisce, forse puoi provare a reindirizzare usando la _redirectfunzione come:

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

Forse la resultRedirectfunzione cancella la sessione del messaggio in modo che il tuo messaggio non venga mai visualizzato.


2

Sì, ho aggiunto un messaggio usando $ resultRedirect con

$ ResultRedirect-> setURL ($ this -> _ redirect ( 'CRUD / index / form'));

Vedi sotto il codice del controller

spazio dei nomi Darsh \ Crud \ Controller \ Index;

usa Magento \ Framework \ App \ Filesystem \ DirectoryList;

class Post estende \ Magento \ Contact \ Controller \ Index {
// class Post estende \ Magento \ Framework \ App \ Action \ Action {


    public function execute () {
        $ data = $ this-> getRequest () -> getPostValue ();

        if (! $ data) {
            $ This -> _ redirect ( 'CRUD / index / form');
            ritorno;
        }

        $ resultRedirect = $ this-> resultRedirectFactory-> create ();
        provare {
            $ model = $ this -> _ objectManager-> create ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['image'] ['name']) && $ _FILES ['image'] ['name']! = '') {
                provare {
                    $ uploader = $ this -> _ objectManager-> create ('\ Magento \ MediaStorage \ Model \ File \ Uploader', array ('fileId' => 'image'));
                    $ uploader-> setAllowedExtensions (array ('jpg', 'jpeg', 'gif', 'png'));
                    $ Uploader-> setAllowRenameFiles (true);
                    $ Uploader-> setFilesDispersion (true);
                    $ mediaDirectory = $ this -> _ objectManager-> get ('Magento \ Framework \ Filesystem')
                            -> getDirectoryRead (serviziScarica l'elenco :: MEDIA);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ risultato = $ uploader-> save ($ mediaDirectory-> getAbsolutePath ('bannerslider / images'));
                    unset ($ result [ 'tmp_name']);
                    unset ($ result [ 'path']);
                    $ data ['image'] = $ result ['file'];
                } catch (eccezione $ e) {
                    $ data ['image'] = $ _FILES ['image'] ['name'];
                }
            } else if (isset ($ data ['image'] ['delete'])) {
                $ data ['image'] = '';
            } else if (isset ($ data ['image'] ['value'])) {
                $ data ['image'] = $ data ['image'] ['value'];
            }

            $ Modello-> setData ($ data);
            $ Modello-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> save ();
            provare {
                $ Modello-> save ();
                $ This-> messageManager-> addSuccess (
                        __ ("Grazie per averci contattato per i tuoi commenti e domande. Ti risponderemo molto presto.")
                );
                // $ this -> _ redirect ( 'CRUD / index / form');
                //ritorno;
            } catch (\ Exception $ e) {
                $ This-> messageManager-> addError (
                        __ ('Non possiamo elaborare la tua richiesta in questo momento. Siamo spiacenti, questo è tutto ciò che sappiamo.'));
                // $ this -> _ redirect ( 'CRUD / index / form');
                //ritorno;
            }
        } catch (\ Exception $ e) {
            $ This-> messageManager-> addError (
                    __ ("Non possiamo elaborare la tua richiesta in questo momento. Siamo spiacenti, questo è tutto ciò che sappiamo.")
            );
            // $ this -> _ redirect ( 'CRUD / index / form');
            //ritorno;
        }

        $ ResultRedirect-> setURL ($ this -> _ redirect ( 'CRUD / index / form'));

        return $ resultRedirect;
    }

}

Grazie.


2

Prova a utilizzare XDEBUG, imposta il punto di interruzione nell'azione del controller. Forse è stato un reindirizzamento duplicato e la creazione di messaggi persi nel gestore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.