如何在magento 2 Beta中在前端显示会话消息


12

我想在magento 2模块中显示错误或成功消息。我用类名扩展了前端控制器\Magento\Framework\App\Action\Action。然后我使用以下代码将客户端重定向到主页

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

一切正常,但此行从不打印错误

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

您必须在店面或管理面板中显示消息吗?
康迪(Kandy)2015年

我想在店面显示消息
Shaheer Ali

Answers:


7

我遇到了与Magento2 Beta源中的显示消息有关的问题。默认情况下,在某些来源中显示错误和成功消息,但在某些情况下不显示,请按照以下步骤操作。

步骤1:我在Darsh \ Crud \ Block \ Message.php的自定义模块中创建了Message.php文件


命名空间Darsh \ Crud \ Block;

Message扩展\ Magento \ Framework \ View \ Element \ Messages {

    公共功能__construct(
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Magento \ Framework \ Message \ Factory $ messageFactory,
        \ Magento \ Framework \ Message \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ ManagerInterface $ messageManager,       
        数组$ data = []
    ){
        父母:: __ construct(
            $ context,
            $ messageFactory,
            $ collectionFactory,
            $ messageManager,
            $数据
        );       
    }

    受保护的函数_prepareLayout()
    {
        $ this-> addMessages($ this-> messageManager-> getMessages(true));       
        返回parent :: _ prepareLayout();
    }

}

步骤2:在Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml中将消息块添加到处理程序中

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

请为布局句柄添加开始和结束标记<>。

现在,您可以在Darsh \ Crud \ Controller \ Index \ Form中看到添加的自定义消息。

如果遇到任何问题,请参见https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git上的示例模块


经过一些修改后,我得到了结果:)
Shaheer Ali

7

在布局文件中,我使用了以下代码。现在我在前端收到了消息。

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

Thankyou Marius
Naveenbos '16

1
谢谢@Naveen。在我的自定义模块
Ankit Shah

6

我也遇到过同样的问题,可以通过在布局文件中添加以下内容来解决此问题:

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

这应该解决它;)


2

您是否尝试过返回代码的最后一行?

return $resultRedirect->setPath($base_path);

addError除非$SomeMessage变量为空,否则实际函数看起来不错,您是否也检查过?

如果失败,您可以尝试使用_redirect函数重定向,例如:

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

也许该resultRedirect功能清除了消息会话,所以您的消息永远不会显示。


2

是的,我使用$ resultRedirect对象添加了消息

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

请参见下面的控制器代码

命名空间Darsh \ Crud \ Controller \ Index;

使用Magento \ Framework \ App \ Filesystem \ DirectoryList;

类Post扩展了\ Magento \ Contact \ Controller \ Index {
// class Post扩展了\ Magento \ Framework \ App \ Action \ Action {


    公共功能execute(){
        $ data = $ this-> getRequest()-> getPostValue();

        如果(!$ data){
            $ this-> _ redirect('crud / index / form');
            返回;
        }

        $ resultRedirect = $ this-> resultRedirectFactory-> create();
        尝试{
            $ model = $ this-> _ objectManager-> create('Darsh \ Crud \ Model \ Crud');
            if(isset($ _ FILES ['image'] ['name'])&& $ _FILES ['image'] ['name']!=''){
                尝试{
                    $ 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'));
                    未设置($ 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()])
                        ->保存();
            尝试{
                $ model-> save();
                $ this-> messageManager-> addSuccess(
                        __(“感谢您提出意见和问题与我们联系。我们会尽快回复您。”)
                );
                // $ this-> _ redirect('crud / index / form');
                //返回;
            } catch(\ Exception $ e){
                $ this-> messageManager-> addError(
                        __(“我们现在无法处理您的请求。对不起,这就是我们所知道的全部。”));
                // $ this-> _ redirect('crud / index / form');
                //返回;
            }
        } catch(\ Exception $ e){
            $ this-> messageManager-> addError(
                    __(“我们现在无法处理您的请求。对不起,这就是我们所知道的全部。”)
            );
            // $ this-> _ redirect('crud / index / form');
            //返回;
        }

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

        返回$ resultRedirect;
    }

}

谢谢。


2

尝试使用XDEBUG,在控制器操作处设置断点。也许它是重复的重定向并在管理​​器中丢失了消息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.