Comment afficher les messages de session à l'avant dans la version bêta de Magento 2

12

Je souhaite afficher un message d'erreur ou de réussite dans mon module magento 2. J'ai étendu mon contrôleur frontal avec le nom de classe \Magento\Framework\App\Action\Action. Ensuite, je redirige le client vers la page d'accueil en utilisant le code suivant

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

Tout fonctionne bien mais cette ligne n'imprime jamais l'erreur

$this->messageManager->addError($SomeMessage);
Shaheer Ali
la source
Devez-vous afficher des messages sur la vitrine ou dans le panneau d'administration?
KAndy
Je veux afficher des messages sur la vitrine
Shaheer Ali

Réponses:

7

J'ai rencontré un problème lié à l'affichage du message dans la source bêta de Magento2. Dans certaines sources, par défaut, le message d'erreur et de succès s'affiche, mais dans certains cas, il ne s'affiche pas, puis suivez les étapes ci-dessous.

Étape 1: j'ai créé le fichier Message.php dans mon module personnalisé dans Darsh \ Crud \ Block \ Message.php


espace de noms Darsh \ Crud \ Block;

classe Message étend \ Magento \ Framework \ View \ Element \ Messages {

    fonction publique __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Magento \ Framework \ Message \ Factory $ messageFactory,
        \ Magento \ Framework \ Message \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ ManagerInterface $ messageManager,       
        tableau $ data = []
    ) {
        parent :: __ construct (
            $ context,
            $ messageFactory,
            $ collectionFactory,
            $ messageManager,
            $ data
        );       
    }

    fonction protégée _prepareLayout ()
    {
        $ this-> addMessages ($ this-> messageManager-> getMessages (true));       
        return parent :: _ prepareLayout ();
    }

}

Étape 2: ajout d'un bloc de messages dans le gestionnaire dans Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml

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

Veuillez ajouter la balise d'ouverture et de fermeture <> pour la poignée de mise en page.

Vous pouvez maintenant voir votre message personnalisé ajouté dans Darsh \ Crud \ Controller \ Index \ Form.

Si vous rencontrez un problème, veuillez consulter l'exemple de module sur https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git

Darsh modi
la source
Après quelques modifications, j'ai obtenu les résultats :)
Shaheer Ali
7

Dans le fichier de mise en page, j'ai utilisé le code ci-dessous. maintenant j'ai le message en 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>
Naveenbos
la source
Merci Marius
Naveenbos
1
Merci @Naveen. Fonctionne bien dans Magento 2 dans mon module personnalisé
Ankit Shah
6

J'ai rencontré le même problème et j'ai pu le résoudre en ajoutant les éléments suivants dans mon fichier de mise en page:

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

Cela devrait le réparer;)

jony974
la source
2

Avez-vous essayé de renvoyer votre dernière ligne de code?

return $resultRedirect->setPath($base_path);

La addErrorfonction réelle semble correcte à moins que la $SomeMessagevariable ne soit vide, l'avez-vous également vérifiée?

Si cela échoue, vous pouvez essayer de rediriger en utilisant la _redirectfonction à la place comme:

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

Peut-être que la resultRedirectfonction efface la session de message afin que votre message ne soit jamais affiché.

Javier Villanueva
la source
2

Oui, j'ai ajouté un message en utilisant l'objet $ resultRedirect avec

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

Veuillez voir ci-dessous le code du contrôleur

espace de noms Darsh \ Crud \ Controller \ Index;

utilisez Magento \ Framework \ App \ Filesystem \ DirectoryList;

classe Post étend \ Magento \ Contact \ Controller \ Index {
// classe Post étend \ Magento \ Framework \ App \ Action \ Action {


    fonction publique execute () {
        $ data = $ this-> getRequest () -> getPostValue ();

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

        $ resultRedirect = $ this-> resultRedirectFactory-> create ();
        essayez {
            $ model = $ this -> _ objectManager-> create ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['image'] ['name']) && $ _FILES ['image'] ['name']! = '') {
                essayez {
                    $ 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 (DirectoryList :: MEDIA);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ result = $ uploader-> save ($ mediaDirectory-> getAbsolutePath ('bannerslider / images'));
                    unset ($ result ['tmp_name']);
                    unset ($ result ['path']);
                    $ data ['image'] = $ result ['file'];
                } catch (Exception $ 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'];
            }

            $ model-> setData ($ data);
            $ model-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> enregistrer ();
            essayez {
                $ model-> save ();
                $ this-> messageManager-> addSuccess (
                        __ ('Merci de nous avoir contacté avec vos commentaires et questions. Nous vous répondrons très bientôt.')
                );
                // $ this -> _ redirect ('crud / index / form');
                //revenir;
            } catch (\ Exception $ e) {
                $ this-> messageManager-> addError (
                        __ ('Nous ne pouvons pas traiter votre demande pour le moment. Désolé, c'est tout ce que nous savons.'));
                // $ this -> _ redirect ('crud / index / form');
                //revenir;
            }
        } catch (\ Exception $ e) {
            $ this-> messageManager-> addError (
                    __ ('Nous ne pouvons pas traiter votre demande pour le moment. Désolé, c'est tout ce que nous savons.')
            );
            // $ this -> _ redirect ('crud / index / form');
            //revenir;
        }

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

        return $ resultRedirect;
    }

}

Merci.

Darsh modi
la source
2

Essayez d'utiliser XDEBUG, définissez le point d'arrêt à l'action de votre contrôleur. Peut-être qu'il s'agissait d'une redirection redondante et de la perte de messages dans le gestionnaire.

De Nguyen
la source