magento 2ベータ版のフロントエンドでセッションメッセージを表示する方法


12

magento 2モジュールでエラーまたは成功メッセージを表示したい。フロントエンドコントローラをクラス名で拡張しました\Magento\Framework\App\Action\Action。次に、次のコードを使用してクライアントをホームページにリダイレクトします

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

すべて正常に動作しますが、この行はエラーを出力しません

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

ストアフロントまたは管理パネルにメッセージを表示する必要がありますか?
カンディ

私は店頭にメッセージを表示したい
Shaheerアリ

回答:


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 = []
    ){
        parent :: __ construct(
            $ context、
            $ messageFactory、
            $ collectionFactory、
            $ messageManager、
            $ data
        );       
    }

    保護された関数_prepareLayout()
    {
        $ this-> addMessages($ this-> messageManager-> getMessages(true));       
        return 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>

サンキューマリウス
ナビーエンボス

1
@Naveenに感謝します。私のカスタムモジュールでMagentoの2に罰金作品
Ankitシャー

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を拡張します{
//クラスPostは\ Magento \ Framework \ App \ Action \ Actionを拡張します{


    パブリック関数execute(){
        $ data = $ this-> getRequest()-> getPostValue();

        if(!$ 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'));
                    unset($ result ['tmp_name']);
                    unset($ result ['path']);
                    $ data ['image'] = $ result ['file'];
                } catch(例外$ 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()])
                        -> save();
            {
                $ model-> save();
                $ this-> messageManager-> addSuccess(
                        __(「ご意見やご質問をお寄せいただきありがとうございます。すぐにお返事いたします。」)
                );
                // $ this-> _ redirect( 'crud / index / form');
                // return;
            } catch(\ Exception $ e){
                $ this-> messageManager-> addError(
                        __(「リクエストを現在処理できません。申し訳ありませんが、それがすべてです」));
                // $ this-> _ redirect( 'crud / index / form');
                // return;
            }
        } catch(\ Exception $ e){
            $ this-> messageManager-> addError(
                    __(「リクエストを現在処理できません。申し訳ありませんが、それがすべてです。」)
            );
            // $ this-> _ redirect( 'crud / index / form');
            // return;
        }

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

        return $ resultRedirect;
    }

}

ありがとう。


2

XDEBUGを使用してみて、コントローラーアクションでブレークポイントを設定します。たぶん、それはリダイレクトを複製し、マネージャーで失われたメッセージを作成しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.