Como mostrar mensagem de sucesso na sessão Magento2

12

No magento 1 eu posso fazer assim

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

A mesma coisa como posso fazer isso no Magento2? Tentei isso, mas não está funcionando.

Naveenbos
fonte
Você pode definir e obter os valores por sessão. Deseja usar apenas sessão? você tentou Message \ ManagerInterface $ messageManager
Krishna ijjada
Eu tentei isso, mas sem sorte.
Naveenbos 27/07/16
você quer usar apenas sessão?
Krishna ijjada
Estou tentando mostrar uma mensagem de sucesso depois de enviar o formulário com êxito.
Naveenbos 27/07/16
@ Naveen Verifique minha resposta adicionada
Krishna ijjada

Respostas:

20

No Magento 2, podemos fazer isso em duas etapas:

Primeiro, precisamos atribuir a mensagem ao 'messageManager' do seu módulo, como abaixo:

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

Em segundo lugar, precisamos atribuir um espaço reservado para a mensagem através do xml do layout de front-end usado no módulo, conforme indicado abaixo na <body>tag:

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

A atualização de layout acima fará uso do modelo de mensagem do magento para exibir as mensagens.

Jino
fonte
, Como eu adicionar esse contêiner referência no backend
Jaisa
O XML é realmente necessário aqui?
Wouter
10

Magento2 está usando MessageInterface para adicionar todas as mensagens, use o código abaixo para mostrar Messages

Classe Magento Message Framework

\Magento\Framework\Message\ManagerInterface

use o código abaixo no seu arquivo para adicionar mensagens,

protected _messageManager;

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

e adicione funções abaixo nos seus métodos para mostrar mensagens:

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

Espero que isso ajude você a corrigir seu problema.

Rahul Anand
fonte
qual arquivo eu quero adicionar este código
Naveenbos
3

Você pode tentar o código abaixo para adicionar mensagens de sucesso ou erro.

$this->messageManager estava na classe pai chamando de

\ Magento \ Framework \ App \ Ação \ Ação

$ 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;
    }

Você pode atribuir mensagens a messageManager

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

Você pode encontrar mais informações sobre como exibir mensagens de notificação

Espero que isto ajude.

Krishna ijjada
fonte
11
Não use o Gerenciador de objetos diretamente.
Jisse Reitsma
2

Arquivo de layout personalizado

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

Use isso no seu arquivo de layout personalizado para mostrar a mensagem de erro e a mensagem de sucesso do seu arquivo de modelo personalizado.

Arquivo Controlador Customizado

 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
fonte
Se você postar o código como resposta, pelo menos explique brevemente o que esse código está fazendo e onde ele pertence. Respostas com código, mas nenhuma explicação raramente são úteis.
Siarhey Uchukhlebau
@Jeeva Chezhiyan, eu nees para adicionar esta na infra-estrutura, em que i necessário adicionar o recipiente de referência acima
Jaisa
eu estou chamando tge controlador usando ajax, mas eu não quero para enviar status de sucesso resposta a js, eu só preciso mostrar a minha mensagem usando MessageManager, isso é possível
Jaisa