Magento 2 beta sürümünde oturum mesajlarını ön uçta gösterme


12

Magento 2 modülümde bir hata veya başarı mesajı göstermek istiyorum. Ön uç denetleyicimi sınıf adıyla genişlettim \Magento\Framework\App\Action\Action. Sonra aşağıdaki kodu kullanarak istemciyi ana sayfaya yönlendiriyorum

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

Her şey yolunda gidiyor ama bu satır asla hatayı basmıyor

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

Mesajları mağazada veya yönetici panelinde mi göstermeniz gerekiyor?
KAndy

Yanıtlar:


7

Magento2 Beta kaynağındaki ekran mesajıyla ilgili bir sorunla karşılaştım. Bazı kaynaklarda varsayılan olarak ekran hatası ve başarı mesajı görüntülenir, ancak bazı durumlarda görüntülenmez, ardından aşağıdaki adımları izleyin.

Adım 1: Darsh \ Crud \ Block \ Message.php içindeki özel modülümde Message.php dosyasını oluşturdum


ad alanı Darsh \ Crud \ Block;

class Message \ Magento \ Framework \ View \ Element \ Messages {

    kamu işlevi __construct (
        \ Magento \ Framework \ Görünüm \ Öğe \ Şablon \ Bağlam $ bağlamı,
        \ Magento \ Çerçeve \ Mesaj \ Fabrika $ mesajıFabrika,
        \ Magento \ Framework \ İleti \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ ManagerInterface $ messageManager,       
        dizi $ verileri = []
    ) {
        üst :: __ yapı (
            $ Bağlam,
            $ MessageFactory,
            $ CollectionFactory,
            $ MessageManager,
            $ veri
        );       
    }

    korumalı işlev _prepareLayout ()
    {
        $ This-> addMessages ($ this-> messageManager-> getMessages (doğru));       
        dönüş üst öğesi :: _ preparLayout ();
    }

}

Adım 2: Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml içindeki işleyiciye mesaj bloğu eklendi

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

Lütfen yerleşim tutamağı için açılış ve kapanış etiketi <> ekleyin.

Artık özel mesajınızın Darsh \ Crud \ Controller \ Index \ Form'da eklendiğini görebilirsiniz.

Herhangi bir sorunla karşılaşırsanız, lütfen https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git adresindeki Örnek modülüne bakın.


Bazı değişikliklerden sonra sonuçları aldım :)
Shaheer Ali

7

Düzen dosyasında aşağıdaki kodu kullandım. şimdi ön uçtaki mesajı aldım.

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

Teşekkürler Marius
Naveenbos

1
Teşekkürler @Naveen. Özel modülümde Magento 2'de iyi çalışıyor
Ankit Shah

6

Aynı sorunla karşılaştım ve düzen dosyama aşağıdakileri ekleyerek sorunu çözebildim:

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

Bu düzeltmeli;)


2

Kodun son satırını döndürmeyi denediniz mi?

return $resultRedirect->setPath($base_path);

Değişken boş addErrorolmadığı sürece gerçek işlev iyi görünüyor $SomeMessage, bunu da kontrol ettiniz mi?

Bu başarısız olursa, _redirectbunun yerine aşağıdaki işlevi kullanarak yeniden yönlendirmeyi deneyebilirsiniz :

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

Belki de resultRedirectfonksiyon mesaj oturumunu temizler, böylece mesajınız asla gösterilmez.


2

Evet, $ resultsRedirect nesnesini kullanarak ileti ekledim

$ ResultRedirect-> setUrl ($ this -> _ yönlendirme ( 'crud / index / form'));

Lütfen aşağıdaki denetleyici koduna bakın

ad alanı Darsh \ Crud \ Controller \ Index;

Magento \ Framework \ App \ Filesystem \ DirectoryList kullanın;

class Post \ Magento \ İletişim \ Denetleyici \ Dizin {
// Sınıf Postası \ Magento \ Framework \ App \ Action \ Action {


    genel işlev execute () {
        $ data = $ this-> getRequest () -> getPostValue ();

        if (! $ data) {
            $ this -> _ yönlendirme ( 'crud / index / form');
            dönüş;
        }

        $ sonuçRedirect = $ this-> sonuçRedirectFactory-> create ();
        Deneyin {
            $ model = $ this -> _ objectManager-> create ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['image'] ['ad']) && $ _FILES ['image'] ['ad']! = '') {
                Deneyin {
                    $ uploader = $ this -> _ objectManager-> create ('\ Magento \ MediaStorage \ Model \ Dosya \ Yükleyici', dizi ('fileId' => 'görüntü'));
                    $ uploader-> setAllowedExtensions (dizi ('jpg', 'jpeg', 'gif', 'png'));
                    $ Uploader-> setAllowRenameFiles (true);
                    $ Uploader-> setFilesDispersion (true);
                    $ mediaDirectory = $ this -> _ objectManager-> get ('Magento \ Framework \ Dosya Sistemi')
                            -> getDirectoryRead (DirectoryList :: MEDYA);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ sonuç = $ uploader-> save ($ mediaDirectory-> getAbsolutePath ('bannerlider / images'));
                    sertleşmemiş ($ sonuç [ 'tmp_name']);
                    sertleşmemiş ($ sonuç [ 'yol']);
                    $ data ['image'] = $ sonuç ['dosya'];
                } catch (İstisna $ e) {
                    $ data ['image'] = $ _FILES ['image'] ['ad'];
                }
            } else if (isset ($ data ['image'] ['sil'])) {
                $ data ['image'] = '';
            } else if (isset ($ data ['image'] ['değer'])) {
                $ data ['image'] = $ data ['image'] ['değer'];
            }

            $ Modeli-> setData ($ data);
            $ Modeli-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> save ();
            Deneyin {
                $ Modeli-> save ();
                $ This-> messageManager-> addSuccess (
                        __ ('Yorumlarınız ve sorularınız için bizimle iletişime geçtiğiniz için teşekkür ederiz. Çok yakında size cevap vereceğiz.')
                );
                // $ this -> _ yönlendirme ( 'crud / index / form');
                //dönüş;
            } catch (\ Exception $ e) {
                $ This-> messageManager-> addError (
                        __ ('Şu anda isteğinizi işleme koyamıyoruz. Üzgünüm, tüm bildiğimiz bu.'));
                // $ this -> _ yönlendirme ( 'crud / index / form');
                //dönüş;
            }
        } catch (\ Exception $ e) {
            $ This-> messageManager-> addError (
                    __ ('Şu anda isteğinizi işleme koyamıyoruz. Üzgünüm, bildiğimiz tek şey bu.')
            );
            // $ this -> _ yönlendirme ( 'crud / index / form');
            //dönüş;
        }

        $ ResultRedirect-> setUrl ($ this -> _ yönlendirme ( 'crud / index / form'));

        return $ sonuçRedirect;
    }

}

Teşekkürler.


2

XDEBUG kullanmayı deneyin, kontrol noktanızda kırılma noktası ayarlayın. Belki yinelenen yönlendirme ve yöneticide kayıp mesajlar yapıldı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.