如何在会话Magento2中显示成功消息


12

在magento 1中,我可以这样做

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

同样的事情,我该如何在Magento2中进行呢?试过但是没有用。


您可以按会话设置和获取值,是否只想使用会话?您是否尝试过Message \ ManagerInterface $ messageManager
克里希纳(Krishna ijjada)2016年

我已经尝试过了,但是没有运气。
Naveenbos '16

您是否只想使用会话?
克里希纳·伊贾达

成功提交表单后,我试图显示成功消息。
Naveenbos '16

@ Naveen检查我的回答是否添加
Krishna ijjada

Answers:


20

在Magento 2中,我们可以分两步实现:

首先,我们需要将消息从您的模块分配给“ messageManager”,如下所示:

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

其次,我们需要通过模块中使用的前端布局xml为消息分配一个占位符,如下面在<body>标记内给出的:

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

上面的布局更新将利用magento的消息模板来显示消息。


,如何在后端添加此参考容器
Jaisa

这里真的需要XML吗?
Wouter

10

Magento2正在使用MessageInterface添加所有消息,请使用以下代码显示消息

Magento Message Framework类

\Magento\Framework\Message\ManagerInterface

在文件中使用以下代码添加消息,

protected _messageManager;

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

然后在您的方法中添加以下函数以显示消息:

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

希望这可以帮助您解决问题。


我想添加此代码的文件
Naveenbos '16

3

您可以尝试以下代码来添加成功或错误消息。

$this->messageManager 在上课时从

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

您可以将消息分配给 messageManager

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

您可以找到有关如何显示通知消息的更多信息。

希望这可以帮助。


1
不要直接使用对象管理器。
Jisse Reitsma,2017年

2

自定义布局文件

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

在自定义布局文件中使用它可以显示自定义模板文件的错误消息和成功消息。

自定义控制器文件

 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;

如果您将代码发布为答案,请至少简要解释一下此代码的功能以及它的所属位置。有代码但没有解释的答案很少有用。
Siarhey Uchukhlebau

@Jeeva Chezhiyan,我需要在后端添加它,在这里我需要添加上述参考容器
Jaisa

我正在使用ajax调用tge控制器,但是我不想将响应成功状态发送给js,我只需要使用messagemanager来显示我的消息,这有可能
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.