У меня есть модуль, который обрабатывает действие Post, а затем перенаправляет.
Сейчас есть случаи ошибок, и я хотел бы показать сообщения для них пользователям.
Я уже знаю, что этот код добавляет сообщение в сеанс.
$this->messageManager->addError(
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
);
Но я не вижу, как запустить рендеринг.
В настоящее время это отображается только тогда, когда я выполняю другое действие, которое уже использует это в рабочем режиме.
Как например логин с неправильным паролем.
Ответы:
Вам нужно использовать метод инъекции объекта в классе действий вашего модуля, чтобы внедрить в него объект диспетчера сообщений, я привел пример того, что вы можете сделать. Надеюсь, это поможет
источник
addError
метод является устаревшим должен быть addErrorMessage ТеперьНе уверен, что это то, что вы ищете, но я попробую.
Вы можете получить сообщения, как это:
где
messageManager
пример\Magento\Framework\Message\ManagerInterface
.В основном это используется для вызовов ajax для возврата сообщений об ошибках в ответе json, например: (
\Magento\Catalog\Controller\Adminhtml\Category\Move
):Для действий с выводом вы не должны ничего делать (я думаю).
default.xml
Файл макета изMagento_Theme
модуля уже содержит этот блок ,<block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
который должен обрабатывать сообщения.[Примечание стороны]:
не используйте
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
. Вставьте в ваш конструктор экземплярMagento\Framework\Escaper
и используйте его.источник
/customer/section/load/
. Может быть, это помогает.вы также можете найти менеджер сообщений, доступный через него,
$context
который вставляется в конструкторы действий:Далее просто используйте как указано в ответах выше
Надеюсь, это поможет
источник
Для меня, похоже, вам нужно добавить специальный блок для ваших сообщений, если вы хотите показать их не JS-способом.
Например, в Magento \ Checkout \ view \ frontend \ layout \ checkout_cart_index.xml есть:
Magento\Checkout\Block\Cart\ValidationMessages
блок расширяет основной\Magento\Framework\View\Element\Messages
блок, который отвечает за рендеринг сообщений.Блоки, определенные в,
default.xml
предназначены только для сообщений JS.источник
checkout_index_index.xml
?Взгляни на
продавец / Magento / модуль-клиент / вид / интерфейс / веб / JS / клиент-data.js
Как мы видим, уже есть встроенная функция проверки . Если наш ответ содержит ключевые слова:,
'redirect', 'backUrl'
сообщение будет загружено после перенаправления.'redirect', 'backUrl'
.источник