Як показувати повідомлення сеансу на передньому кінці в бета-версії 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 Ali

Відповіді:


7

У мене виникли проблеми, пов’язані з відображенням повідомлення у джерелі Magento2 Beta. У деяких джерелах за замовчуванням відображається повідомлення про помилку та повідомлення про успіх, але в деяких випадках воно не відображається, тоді виконайте наступні кроки.

Крок 1. Я створив файл Message.php у своєму спеціальному модулі в Darsh \ Crud \ Block \ Message.php


простір імен Darsh \ Crud \ Block;

клас Повідомлення поширюється \ Magento \ Framework \ Перегляд \ Елемент \ Повідомлення {

    публічна функція __construct (
        \ Magento \ Framework \ Перегляд \ Елемент \ Шаблон \ Контекст $ контексту,
        \ Magento \ Framework \ Повідомлення \ Factory $ messageFactory,
        \ Magento \ Framework \ Повідомлення \ КолекціяFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ ManagerInterface $ messageManager,       
        масив $ data = []
    ) {
        батьківська :: __ конструкція (
            $ контекст,
            $ messageFactory,
            $ collectionFactory,
            $ messageManager,
            $ даних
        );       
    }

    захищена функція _prepareLayout ()
    {
        $ this-> addMessages ($ this-> messageManager-> getMessages (true));       
        повернення батьків :: _ PrepaLayout ();
    }

}

Крок 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


Після деяких модифікацій я отримав результати :)
Шахер Алі

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>

Thankyou Marius
Naveenbos

1
Дякую @Naveen Відмінно працює в Magento 2 в моєму користувальницькому модулі
Ankit Shah

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;

клас Повідомлення поширюється \ Magento \ Contact \ Controller \ Index {
// Клас розширює повідомлення \ Magento \ Framework \ App \ Action \ Дія {


    публічна функція Execute () {
        $ data = $ this-> getRequest () -> getPostValue ();

        if (! $ data) {
            $ this -> _ перенаправлення ('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 (масив ('jpg', 'jpeg', 'gif', 'png'));
                    $ uploader-> setAllowRenameFiles (вірно);
                    $ uploader-> setFilesDispersion (вірно);
                    $ mediaDirectory = $ this -> _ objectManager-> get ('Magento \ Framework \ Filesystem')
                            -> getDirectoryRead (DirectoryList :: MEDIA);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ result = $ uploader-> save ($ mediaDirectory-> getAbsolutePath ('банери / зображення'));
                    unset ($ result ['tmp_name']);
                    unset ($ result ['path']);
                    $ data ['image'] = $ result ['файл'];
                } улов (виняток $ 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 ($ дані);
            $ model-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> зберегти ();
            спробуйте {
                $ model-> save ();
                $ this-> messageManager-> addSuccess (
                        __ ("Дякуємо, що зв’язалися з нами зі своїми коментарями та запитаннями. Ми відповімо на вас дуже скоро.")
                );
                // $ this -> _ перенаправлення ('crud / index / form');
                // повернути;
            } catch (\ Виняток $ e) {
                $ this-> messageManager-> addError (
                        __ ("Ми не можемо обробити ваш запит зараз. Вибачте, це все, що ми знаємо."));
                // $ this -> _ перенаправлення ('crud / index / form');
                // повернути;
            }
        } catch (\ Виняток $ e) {
            $ this-> messageManager-> addError (
                    __ ("Зараз ми не можемо обробити ваш запит. Вибачте, це все, що ми знаємо.")
            );
            // $ this -> _ перенаправлення ('crud / index / form');
            // повернути;
        }

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

        повернути $ resultRedirect;
    }

}

Дякую.


2

Спробуйте скористатися XDEBUG, встановіть точку розриву на дії контролера. Можливо, це було скопійоване переспрямування та отримання втрачених повідомлень у менеджері.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.