Comment afficher le message de réussite dans la session Magento2

12

Dans magento 1, je peux le faire comme ça

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

Même chose, comment puis-je le faire dans Magento2? J'ai essayé ça mais ça ne marchait pas.

Naveenbos
la source
Vous pouvez définir et obtenir les valeurs par session, voulez-vous utiliser uniquement la session? avez-vous essayé Message \ ManagerInterface $ messageManager
Krishna ijjada
j'ai essayé mais pas de chance.
Naveenbos
voulez-vous utiliser uniquement la session?
Krishna ijjada
J'essaie d'afficher un message de réussite après avoir soumis le formulaire avec succès.
Naveenbos
@ Naveen Vérifiez ma réponse ajoutée
Krishna ijjada

Réponses:

20

Dans Magento 2, nous pouvons y parvenir en deux étapes:

Tout d'abord, nous devons attribuer le message à «messageManager» de votre module comme ci-dessous:

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

Deuxièmement, nous devons attribuer un espace réservé pour le message via le format XML frontal utilisé dans le module, comme indiqué ci-dessous à l'intérieur de la <body>balise:

<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 mise à jour de la mise en page ci-dessus utilisera le modèle de message de magento pour afficher les messages.

Jino
la source
, Comment ajouter ce conteneur de référence dans le backend
Jaisa
Le XML est-il vraiment nécessaire ici?
Wouter
10

Magento2 utilise MessageInterface pour ajouter tous les messages, veuillez utiliser le code ci-dessous pour afficher les messages

Classe Magento Message Framework

\Magento\Framework\Message\ManagerInterface

utilisez le code ci-dessous dans votre fichier pour ajouter des messages,

protected _messageManager;

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

puis ajoutez les fonctions ci-dessous dans vos méthodes pour afficher les messages:

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

J'espère que cela vous aidera à résoudre votre problème.

Rahul Anand
la source
quel fichier je veux ajouter ce code
Naveenbos
3

Vous pouvez essayer le code ci-dessous pour ajouter des messages de réussite ou d'erreur.

$this->messageManager était en classe parent appelant de

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

Vous pouvez attribuer des messages à messageManager

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

Vous pouvez trouver plus d'informations sur la façon d' afficher les messages de notification

J'espère que cela t'aides.

Krishna ijjada
la source
1
N'utilisez pas directement le gestionnaire d'objets.
Jisse Reitsma
2

Fichier de mise en page personnalisé

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

Utilisez-le dans votre fichier de présentation personnalisé pour afficher le message d'erreur et le message de réussite de votre fichier de modèle personnalisé.

Fichier contrôleur personnalisé

 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
la source
Si vous postez du code comme réponse, veuillez au moins expliquer brièvement ce que fait ce code et où il appartient. Les réponses avec du code mais aucune explication sont rarement utiles.
Siarhey Uchukhlebau
@Jeeva Chezhiyan, je dois ajouter ceci dans le backend, où j'ai besoin d'ajouter le conteneur de référence ci-dessus
Jaisa
j'appelle le contrôleur tge en utilisant ajax, mais je ne veux pas envoyer le statut de réussite de la réponse à js, j'ai juste besoin de montrer mon message en utilisant messagemanager, est-ce possible
Jaisa