Como mostrar mensagens de sessão no front end no magento 2 beta


12

Quero mostrar uma mensagem de erro ou sucesso no meu módulo magento 2. Estendi meu controlador front-end com o nome da classe \Magento\Framework\App\Action\Action. Em seguida, redireciono o cliente para a página inicial usando o seguinte código

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

Tudo funciona bem, mas esta linha nunca imprime o erro

$this->messageManager->addError($SomeMessage);

Você precisa mostrar mensagens na loja ou no painel de administração?
Kandy

Quero mostrar mensagens na vitrine
Shaheer Ali

Respostas:


7

Eu enfrentei um problema relacionado à exibição de mensagens na fonte Magento2 Beta. Em algumas fontes, por padrão, é exibida a mensagem de erro e sucesso, mas em alguns casos ela não é exibida e siga as etapas abaixo.

Etapa 1: Criei o arquivo Message.php no meu módulo personalizado em Darsh \ Crud \ Block \ Message.php


espaço para nome Darsh \ Crud \ Block;

classe Message estende \ Magento \ Framework \ View \ Element \ Messages {

    função 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 $ data = []
    ) {
        parent :: __ construct (
            $ context,
            $ messageFactory,
            $ collectionFactory,
            $ messageManager,
            $ data
        );       
    }

    função protegida _prepareLayout ()
    {
        $ this-> addMessages ($ this-> messageManager-> getMessages (true));       
        retornar pai :: _ prepareLayout ();
    }

}

Etapa 2: bloco de mensagens adicionado ao handeler em Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml

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

Adicione a tag de abertura e fechamento <> para o identificador de layout.

Agora você pode ver sua mensagem personalizada adicionada em Darsh \ Crud \ Controller \ Index \ Form.

Se você enfrentar algum problema, consulte o módulo Exemplo em https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git


Depois de algumas modificações que eu obtive os resultados :)
Shaheer Ali

7

No arquivo de layout, usei o código abaixo. agora eu recebi a mensagem no 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>

Obrigado Marius
Naveenbos

1
Obrigado @Naveen. Funciona bem no Magento 2 no meu módulo personalizado
Ankit Shah

6

Eu enfrentei o mesmo problema e consegui corrigi-lo adicionando o seguinte no meu arquivo de layout:

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

Isso deve corrigi-lo;)


2

Você tentou retornar sua última linha do código?

return $resultRedirect->setPath($base_path);

A addErrorfunção real parece correta, a menos que a $SomeMessagevariável esteja vazia, você também verificou?

Se isso falhar, talvez você possa tentar redirecionar usando a _redirectfunção:

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

Talvez a resultRedirectfunção limpe a sessão de mensagens para que sua mensagem nunca seja exibida.


2

Sim, adicionei uma mensagem usando o objeto $ resultRedirect com

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

Veja abaixo o código do controlador

espaço para nome Darsh \ Crud \ Controller \ Index;

use Magento \ Framework \ App \ Filesystem \ DirectoryList;

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


    função pública execute () {
        $ data = $ this-> getRequest () -> getPostValue ();

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

        $ resultRedirect = $ this-> resultRedirectFactory-> create ();
        experimentar {
            $ model = $ this -> _ objectManager-> create ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['imagem'] ['nome']) && $ _FILES ['imagem'] ['nome']! = '') {
                experimentar {
                    $ uploader = $ this -> _ objectManager-> create ('\ Magento \ MediaStorage \ Model \ File \ Uploader', array ('fileId' => 'imagem'));
                    $ uploader-> setAllowedExtensions (array ('jpg', 'jpeg', 'gif', 'png'));
                    $ uploader-> setAllowRenameFiles (true);
                    $ uploader-> setFilesDispersion (true);
                    $ mediaDirectory = $ this -> _ objectManager-> get ('Magento \ Framework \ Sistema de arquivos')
                            -> getDirectoryRead (DirectoryList :: MEDIA);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ result = $ uploader-> save ($ mediaDirectory-> getAbsolutePath ('bannerslider / images'));
                    não definido ($ result ['tmp_name']);
                    não definido ($ resultado ['caminho']);
                    $ data ['imagem'] = $ resultado ['arquivo'];
                } catch (exceção $ e) {
                    $ data ['imagem'] = $ _FILES ['imagem'] ['nome'];
                }
            } else if (isset ($ data ['imagem'] ['excluir'])) {
                $ data ['image'] = '';
            } else if (isset ($ data ['imagem'] ['valor'])) {
                $ data ['imagem'] = $ data ['imagem'] ['valor'];
            }

            $ model-> setData ($ data);
            $ model-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> salvar ();
            experimentar {
                $ model-> save ();
                $ this-> messageManager-> addSuccess (
                        __ ('Obrigado por nos contatar com seus comentários e perguntas. Responderemos em breve.')
                );
                // $ this -> _ redirect ('crud / index / form');
                //Retorna;
            } captura (\ Exceção $ e) {
                $ this-> messageManager-> addError (
                        __ ('Não podemos processar sua solicitação no momento. Desculpe, isso é tudo o que sabemos.'));
                // $ this -> _ redirect ('crud / index / form');
                //Retorna;
            }
        } captura (\ Exceção $ e) {
            $ this-> messageManager-> addError (
                    __ ('Não podemos processar sua solicitação no momento. Desculpe, isso é tudo o que sabemos.')
            );
            // $ this -> _ redirect ('crud / index / form');
            //Retorna;
        }

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

        return $ resultRedirect;
    }

}

Obrigado.


2

Tente usar o XDEBUG, defina o ponto de interrupção na ação do seu controlador. Talvez tenha sido duplicado o redirecionamento e a perda de mensagens no gerenciador.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.