Cómo mostrar mensajes de sesión en el front end en magento 2 beta

12

Quiero mostrar un mensaje de error o de éxito en mi módulo magento 2. He extendido mi controlador de front-end con el nombre de la clase \Magento\Framework\App\Action\Action. Luego redirijo al cliente a la página de inicio usando el siguiente código

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

Todo funciona bien pero esta línea nunca imprime el error

$this->messageManager->addError($SomeMessage);
Shaheer Ali
fuente
¿Tiene que mostrar mensajes en el escaparate o en el panel de administración?
KAndy
Quiero mostrar mensajes en el escaparate
Shaheer Ali

Respuestas:

7

Me he enfrentado a un problema relacionado con la visualización del mensaje en la fuente Beta de Magento2. En algunas fuentes, por defecto, se muestra un mensaje de error y éxito, pero en algunos casos no se muestra, siga los pasos a continuación.

Paso 1: he creado el archivo Message.php en mi módulo personalizado en Darsh \ Crud \ Block \ Message.php


espacio de nombres Darsh \ Crud \ Block;

El mensaje de clase se extiende \ Magento \ Framework \ View \ Element \ Messages {

    función pública __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Magento \ Framework \ Message \ Factory $ messageFactory,
        \ Magento \ Framework \ Message \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ ManagerInterface $ messageManager,       
        matriz $ datos = []
    ) {
        parent :: __ construct (
            $ contexto,
            $ messageFactory,
            $ collectionFactory,
            $ messageManager,
            $ datos
        );       
    }

    función protegida _prepareLayout ()
    {
        $ this-> addMessages ($ this-> messageManager-> getMessages (true));       
        return parent :: _ prepareLayout ();
    }

}

Paso 2: Se agregó un bloque de mensajes al administrador en Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml

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

Agregue la etiqueta de apertura y cierre <> para el controlador de diseño.

Ahora puede ver su mensaje personalizado agregado en Darsh \ Crud \ Controller \ Index \ Form.

Si tiene algún problema, consulte el Módulo de ejemplo en https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git

Darsh modi
fuente
Después de algunas modificaciones obtuve los resultados :)
Shaheer Ali
7

En el archivo de diseño, he usado el siguiente código. ahora recibí el mensaje en la interfaz.

<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>
Naveenbos
fuente
Gracias Marius
Naveenbos
1
Gracias @Naveen. Funciona bien en Magento 2 en mi módulo personalizado
Ankit Shah
6

Me enfrenté al mismo problema y pude solucionarlo agregando lo siguiente en mi archivo de diseño:

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

Esto debería arreglarlo;)

usuario3245246
fuente
2

¿Has intentado devolver tu última línea del código?

return $resultRedirect->setPath($base_path);

La addErrorfunción real se ve bien a menos que la $SomeMessagevariable esté vacía, ¿lo ha verificado también?

Si eso falla, puede intentar redirigir usando la _redirectfunción como:

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

Tal vez la resultRedirectfunción borra la sesión de mensajes para que su mensaje nunca se muestre.

Javier Villanueva
fuente
2

Sí, he agregado un mensaje usando el objeto $ resultRedirect con

$ resultRedirect-> setUrl ($ this -> _ redirect ('crud / index / form'));

Por favor, vea el código del controlador a continuación

espacio de nombres Darsh \ Crud \ Controller \ Index;

use Magento \ Framework \ App \ Filesystem \ DirectoryList;

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


    función pública execute () {
        $ datos = $ this-> getRequest () -> getPostValue ();

        if (! $ data) {
            $ this -> _ redirect ('crud / index / form');
            regreso;
        }

        $ resultRedirect = $ this-> resultRedirectFactory-> create ();
        tratar {
            $ model = $ this -> _ objectManager-> create ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['image'] ['name']) && $ _FILES ['image'] ['name']! = '') {
                tratar {
                    $ uploader = $ this -> _ objectManager-> create ('\ Magento \ MediaStorage \ Model \ File \ Uploader', array ('fileId' => 'image'));
                    $ uploader-> setAllowedExtensions (array ('jpg', 'jpeg', 'gif', 'png'));
                    $ uploader-> setAllowRenameFiles (verdadero);
                    $ uploader-> setFilesDispersion (verdadero);
                    $ mediaDirectory = $ this -> _ objectManager-> get ('Magento \ Framework \ Filesystem')
                            -> getDirectoryRead (DirectoryList :: MEDIA);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ result = $ uploader-> save ($ mediaDirectory-> getAbsolutePath ('bannerslider / images'));
                    unset ($ resultado ['tmp_name']);
                    unset ($ resultado ['ruta']);
                    $ data ['imagen'] = $ resultado ['archivo'];
                } catch (Excepción $ e) {
                    $ data ['imagen'] = $ _FILES ['imagen'] ['nombre'];
                }
            } else if (isset ($ data ['imagen'] ['eliminar'])) {
                $ data ['image'] = '';
            } else if (isset ($ data ['imagen'] ['valor'])) {
                $ data ['imagen'] = $ data ['imagen'] ['valor'];
            }

            $ modelo-> setData ($ datos);
            $ model-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> guardar ();
            tratar {
                $ modelo-> save ();
                $ this-> messageManager-> addSuccess (
                        __ ("Gracias por contactarnos con sus comentarios y preguntas. Le responderemos muy pronto")
                );
                // $ this -> _ redirect ('crud / index / form');
                //regreso;
            } catch (\ Exception $ e) {
                $ this-> messageManager-> addError (
                        __ ('No podemos procesar su solicitud en este momento. Lo sentimos, eso es todo lo que sabemos'));
                // $ this -> _ redirect ('crud / index / form');
                //regreso;
            }
        } catch (\ Exception $ e) {
            $ this-> messageManager-> addError (
                    __ ('No podemos procesar su solicitud en este momento. Lo sentimos, eso es todo lo que sabemos').
            );
            // $ this -> _ redirect ('crud / index / form');
            //regreso;
        }

        $ resultRedirect-> setUrl ($ this -> _ redirect ('crud / index / form'));

        return $ resultRedirect;
    }

}

Gracias.

Darsh modi
fuente
2

Intente usar XDEBUG, establezca el punto de interrupción en la acción de su controlador. Tal vez fue duplicar la redirección y hacer que los mensajes perdidos en el administrador.

De Nguyen
fuente