Cómo mostrar el mensaje de éxito en la sesión Magento2

12

En magento 1 puedo hacerlo así

$session            = Mage::getSingleton('core/session');
$session->addSuccess($this->__('Your Request has been received. One of our sales representatives will contact you shortly.'));

Lo mismo, ¿cómo puedo hacerlo en Magento2? Intenté esto pero no funcionó.

Naveenbos
fuente
Puede establecer y obtener los valores por sesión, ¿desea usar solo sesión? ¿Has probado Message \ ManagerInterface $ messageManager
Krishna ijjada el
He intentado esto pero no tuve suerte.
Naveenbos
¿quieres usar solo sesión?
Krishna ijjada
Estoy tratando de mostrar un mensaje de éxito después de enviar el formulario correctamente.
Naveenbos
@ Naveen Compruebe mi respuesta añadido
Krishna ijjada

Respuestas:

20

En Magento 2, podemos lograr esto en dos pasos:

Primero, debemos asignar el mensaje a 'messageManager' desde su módulo de la siguiente manera:

$this->messageManager->addSuccess(__('This is a success message.'));

En segundo lugar, debemos asignar un marcador de posición para el mensaje a través del diseño frontend xml utilizado en el módulo como se indica a continuación dentro de la <body>etiqueta:

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

La actualización de diseño anterior utilizará la plantilla de mensajes de magento para mostrar los mensajes.

Jino
fuente
, Cómo agregar este contenedor de referencia en el backend
Jaisa
¿Es realmente necesario el XML aquí?
Wouter
10

Magento2 está utilizando MessageInterface para agregar todos los mensajes, utilice el siguiente código para mostrar Mensajes

Clase Magento Message Framework

\Magento\Framework\Message\ManagerInterface

use el siguiente código en su archivo para agregar mensajes,

protected _messageManager;

public function __construct(\Magento\Framework\View\Element\Template\Context $context, \Magento\Framework\Message\ManagerInterface $messageManager) {
        parent::__construct($context);
        $this->_messageManager = $messageManager;
    }

y luego agregue las siguientes funciones en sus métodos para mostrar mensajes:

$this->_messageManager->addError(__("Error Message"));
$this->_messageManager->addWarning(__("Warning"));
$this->_messageManager->addNotice(__("Notice"));
$this->_messageManager->addSuccess(__("Success Message"));

Espero que esto te ayude a solucionar tu problema.

Rahul Anand
fuente
en qué archivo quiero agregar este código
Naveenbos
3

Puede probar el siguiente código para agregar mensajes de éxito o error.

$this->messageManager estaba en clase para padres llamando desde

\ Magento \ Framework \ App \ Action \ Action

$ this-> messageManager = $ context-> getMessageManager ();

class Post extends \Magento\Framework\App\Action\Action
{

    public function __construct(
        \Magento\Framework\App\Action\Context $context
    ) {
        parent::__construct($context);
    }
    public function execute()
    {

$data = $this->getRequest()->getPostValue();

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();       
$question = $objectManager->create('Myvendor\Mymodule\Model\Feedback');

/****** set your data *********/
$question->setData($data);
$question->save();

$this->messageManager->addSuccess( __('Thanks for your valuable feedback.') );

/* ***** OR

$this->messageManager->addError('There is something went wrong');
$this->_redirect('*/');
return;
    }

Puedes asignar mensajes a messageManager

$this->_messageManager->addError(__("Error"));
$this->_messageManager->addWarning(__("Warning"));
$this->_messageManager->addNotice(__("Notice"));
$this->_messageManager->addSuccess(__("Success"));

Puede encontrar más información sobre cómo mostrar mensajes de notificación

Espero que esto ayude.

Krishna ijjada
fuente
1
No use el Administrador de objetos directamente.
Jisse Reitsma
2

Archivo de diseño personalizado

<referenceContainer name="page.messages">
        <block class="Magento\Framework\View\Element\Messages" name="messages" as="messages"/>
 </referenceContainer>

Use esto en su archivo de diseño personalizado para mostrar el mensaje de error y el mensaje de éxito para su archivo de plantilla personalizado.

Archivo de controlador personalizado

 try{
        $school_model->save();
        $this->messageManager->addSuccess(
                    __('Thanks for Submission'));
    }catch (\Exception $e) {
        $this->messageManager->addError(
                    __('We can\'t process your request right now. Sorry, that\'s all we know.'));   
    }
    $this->_redirect('*/*/');
    return;
Jeeva Chezhiyan
fuente
Si publica el código como respuesta, al menos explique brevemente qué está haciendo este código y a dónde pertenece. Las respuestas con código pero sin explicación rara vez son útiles.
Siarhey Uchukhlebau
@Jeeva Chezhiyan, necesito agregar esto en el backend, donde necesito agregar el contenedor de referencia anterior
Jaisa
Estoy llamando al controlador tge usando ajax, pero no quiero enviar el estado de respuesta exitosa a js, solo necesito mostrar mi mensaje usando messagemanager, ¿es posible?
Jaisa