セッション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

私はこれを試しましたが、運はありません。
Naveenbos

セッションのみを使用しますか?
クリシュナイジャダ16

フォームを正常に送信した後、成功メッセージを表示しようとしています。
Naveenbos

@ Naveenチェック私の答えが追加されました
クリシュナ・イジャダ

回答:


20

Magento 2では、2つのステップでこれを実現できます。

まず、次のようにモジュールからメッセージを「messageManager」に割り当てる必要があります。

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

次に、<body>タグ内で以下に示すように、モジュールで使用されるフロントエンドレイアウトxmlを介してメッセージのプレースホルダーを割り当てる必要があります。

<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
Object Managerを直接使用しないでください。
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 2017年

@Jeeva Chezhiyan、これをバックエンドに追加する必要があります。上記の参照コンテナを追加する必要があります
Jaisa

私はajaxを使用してtgeコントローラーを呼び出していますが、応答成功ステータスをjsに送信したくないので、messagemanagerを使用してメッセージを表示するだけです。これは可能です
Jaisa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.