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);
Shaheer Ali
sumber
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

Modi keras
sumber
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>
Naveenbos
sumber
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;)

pengguna3245246
sumber
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.

Javier Villanueva
sumber
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.

Modi keras
sumber
2

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

De Nguyen
sumber