Как показать сообщение об успехе в сеансе 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? Пробовал это, но не работает.

Naveenbos
источник
Вы можете установить и получить значения по сеансу, вы хотите использовать только сеанс? Вы пробовали Message \ ManagerInterface $ messageManager
Кришна Иджада
Я попробовал это, но не повезло.
Навинбос
Вы хотите использовать только сеанс?
Кришна Иджада
Я пытаюсь показать сообщение об успешном завершении отправки формы.
Навинбос
@ Навин Проверьте добавленный мой ответ
Кришна Иджада

Ответы:

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
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
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;
Джива Чежиян
источник
Если вы публикуете код в качестве ответа, по крайней мере, кратко объясните, что делает этот код и к чему он относится. Ответы с кодом, но без объяснения, редко бывают полезными.
Сергей Учухлебау
@Jeeva Chezhiyan, мне нужно добавить это в бэкэнд, где мне нужно добавить вышеупомянутый эталонный контейнер
Jaisa
я звоню в контроллер tge с помощью ajax, но я не хочу отправлять js статус успешного ответа, мне просто нужно показать свое сообщение с помощью messagemanager, возможно ли это
Jaisa