Как показать сообщение об успехе в сеансе 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
— Кришна Иджада

Я попробовал это, но не повезло.
— Навинбос

Вы хотите использовать только сеанс?
— Кришна Иджада

Я пытаюсь показать сообщение об успешном завершении отправки формы.
— Навинбос

@ Навин Проверьте добавленный мой ответ
— Кришна Иджада

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.