Cara menampilkan pesan sesi di ujung depan di magento 2 beta


12

Saya ingin menampilkan pesan kesalahan atau sukses di modul magento 2 saya. Saya telah menambah kontroler front-end saya dengan nama kelas \Magento\Framework\App\Action\Action. Lalu saya mengarahkan klien ke beranda menggunakan kode berikut

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

Semuanya berfungsi dengan baik tetapi baris ini tidak pernah mencetak kesalahan

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

Apakah Anda harus menampilkan pesan di etalase atau di panel admin?
KAndy

Saya ingin menampilkan pesan di depan toko
Shaheer Ali

Jawaban:


7

Saya menghadapi masalah terkait dengan tampilan pesan di sumber Magento2 Beta. Di beberapa sumber dengan kesalahan tampilan default dan pesan sukses tetapi dalam beberapa kasus tidak ditampilkan kemudian ikuti langkah-langkah di bawah ini.

Langkah 1: Saya telah membuat file Message.php dalam modul khusus saya di Darsh \ Crud \ Block \ Message.php


namespace Darsh \ Crud \ Block;

kelas Pesan meluas \ Magento \ Framework \ Lihat \ Elemen \ Pesan {

    fungsi publik __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Magento \ Framework \ Message \ Factory $ messageFactory,
        \ Magento \ Framework \ Message \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ ManagerInterface $ messageManager,       
        array $ data = []
    ) {
        parent :: __ construct (
            $ context,
            $ messageFactory,
            $ collectionFactory,
            $ messageManager,
            $ data
        );       
    }

    fungsi terproteksi _prepareLayout ()
    {
        $ this-> addMessages ($ this-> messageManager-> getMessages (true));       
        return parent :: _ prepLayout ();
    }

}

Langkah 2: Menambahkan blok pesan ke handeler di Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml

   <referenceContainer name="page.messages">
        <block class="Darsh\Crud\Block\Message" name="darsh.crud.message" />
    </referenceContainer>

Silakan tambahkan Tag pembuka dan penutup <> untuk pegangan tata letak.

Sekarang Anda dapat melihat pesan khusus Anda ditambahkan di Darsh \ Crud \ Controller \ Index \ Form.

Jika Anda menghadapi masalah apa pun, silakan lihat Modul contoh di https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git


Setelah beberapa modifikasi saya mendapat hasilnya :)
Shaheer Ali

7

Dalam file layout saya telah menggunakan kode di bawah ini. sekarang saya mendapat pesan di frontend.

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

Terima kasih Marius
Naveenbos

1
Terima kasih @Naveen. Berfungsi dengan baik di Magento 2 dalam modul khusus saya
Ankit Shah

6

Saya telah menghadapi masalah yang sama dan saya bisa memperbaikinya dengan menambahkan berikut ini di file tata letak saya:

<body>
    <!-- your layout content -->
    <referenceContainer name="page.messages">
        <block class="Magento\Framework\View\Element\Messages" name="messages" as="messages"/>
    </referenceContainer>
</body>

Ini harus memperbaikinya;)


2

Sudahkah Anda mencoba mengembalikan baris kode yang terakhir?

return $resultRedirect->setPath($base_path);

Fungsi sebenarnya addErrorterlihat baik kecuali $SomeMessagevariabelnya kosong, sudahkah Anda memeriksanya juga?

Jika gagal, mungkin Anda dapat mencoba mengalihkan menggunakan _redirectfungsi, seperti:

$this->_redirect('*/*/');

Mungkin resultRedirectfungsi menghapus sesi pesan sehingga pesan Anda tidak pernah ditampilkan.


2

Ya, saya telah menambahkan pesan menggunakan objek $ resultRedirect dengan

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

Silakan lihat di bawah ini kode pengontrol

namespace Darsh \ Crud \ Controller \ Index;

gunakan Magento \ Framework \ App \ Filesystem \ DirectoryList;

class Post extends \ Magento \ Contact \ Controller \ Index {
// class Post extends \ Magento \ Framework \ App \ Action \ Action {


    mengeksekusi fungsi publik () {
        $ data = $ this-> getRequest () -> getPostValue ();

        if (! $ data) {
            $ this -> _ redirect ('crud / index / form');
            kembali;
        }

        $ resultRedirect = $ this-> resultRedirectFactory-> create ();
        coba {
            $ model = $ this -> _ objectManager-> create ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['image'] ['name']) && $ _FILES ['image'] ['name']! = '') {
                coba {
                    $ 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'));
                    tidak disetel ($ result ['tmp_name']);
                    tidak disetel ($ hasil ['jalur']);
                    $ data ['image'] = $ result ['file'];
                } catch (Exception $ e) {
                    $ data ['image'] = $ _FILES ['image'] ['name'];
                }
            } lain jika (isset ($ data ['image'] ['delete'])) {
                $ data ['image'] = '';
            } lain jika (isset ($ data ['image'] ['value'])) {
                $ data ['image'] = $ data ['image'] ['value'];
            }

            $ model-> setData ($ data);
            $ model-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> save ();
            coba {
                $ model-> save ();
                $ this-> messageManager-> addSuccess (
                        __ ('Terima kasih telah menghubungi kami dengan komentar dan pertanyaan Anda. Kami akan segera menanggapi Anda.')
                );
                // $ this -> _ redirect ('crud / index / form');
                //kembali;
            } catch (\ Exception $ e) {
                $ this-> messageManager-> addError (
                        __ ('Kami tidak dapat memproses permintaan Anda saat ini. Maaf, hanya itu yang kami tahu.'));
                // $ this -> _ redirect ('crud / index / form');
                //kembali;
            }
        } catch (\ Exception $ e) {
            $ this-> messageManager-> addError (
                    __ ('Kami tidak dapat memproses permintaan Anda sekarang. Maaf, hanya itu yang kami tahu.')
            );
            // $ this -> _ redirect ('crud / index / form');
            //kembali;
        }

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

        mengembalikan $ resultRedirect;
    }

}

Terima kasih.


2

Coba gunakan XDEBUG, atur break point pada aksi controller Anda. Mungkin itu digandakan redirect dan membuat pesan yang hilang di manajer.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.