Powiadomienia Magento2

19

W Magento2, w jaki sposób drukujemy dane wejściowe w powiadomieniach dla - Błąd - Sukces - Ostrzeżenie - Powiadomienie

huzefam
źródło

Odpowiedzi:

33

W swojej klasie wstaw klasę Message ManagerInterface:

__construct(\Magento\Framework\Message\ManagerInterface $messageManager) {
    $this->messageManager = $messageManager;
}

Uwaga, Magento ma przestarzałe metody :

$this->messageManager->addSuccess()
$this->messageManager->addError()
$this->messageManager->addWarning() 
$this->messageManager->addNotice()

Zamiast tego powinieneś użyć:

$this->messageManager->addSuccessMessage()
$this->messageManager->addErrorMessage()
$this->messageManager->addWarningMessage() 
$this->messageManager->addNoticeMessage()
Robert Stanley
źródło
Czy działałoby to również podczas kasy na stronie, gdzie „wszystko” to javascript?
peedee
Najwyraźniej sekcja „page.messages” jest usuwana z kasy za pośrednictwem pliku checkout_index_index.xml, więc wiadomości nie będą tam wyświetlane. Zastanawiam się, dlaczego Magento tak to zbudował.
peedee
17

Jeśli używasz kontrolera, najprawdopodobniej masz rozszerzone

\Magento\Framework\App\Action\Action

https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/App/Action/Action.php

Wstrzykuje \Magento\Framework\Message\ManagerInterfaceobiekt w jego __constructfunkcji za pomocą \Magento\Framework\App\Action\Context $contextobiektu

Aby wyświetlić wiadomość,

  1. Sukces -

    $ this-> messageManager-> addSuccess (__ („To jest twój komunikat sukcesu.”));

  2. Błąd -

    $ this-> messageManager-> addError (__ ('To jest twój komunikat błędu.'));

  3. Ostrzeżenie -

    $ this-> messageManager-> addWarning (__ („To jest twój komunikat ostrzegawczy.”));

  4. Ogłoszenie

    $ this-> messageManager-> addNotice (__ („To jest wiadomość z powiadomieniem.”));

Wewnątrz innych klas

class Dummy
{

    /**
     * @var \Magento\Framework\Message\ManagerInterface
     */
   private $messageManager;

   public function __construct(\Magento\Framework\Message\ManagerInterface $messageManager)
   {
       $this->messageManager = $messageManager;
   }

  public function someFunction()
  {
    $this->messageManager->addSuccess('Add your success message');
  }

}

O ile zauważyłem, Magento2 usunęło powiadomienia dotyczące klas sesji.

huzefam
źródło
1
Magento wycofało te metody add <type> (). Zobacz moją odpowiedź.
Robert Stanley,
1
Mam problem z wiadomością, kiedy dodaję do koszyka, wyświetla komunikat o powodzeniu, ale kiedy uzyskuję dostęp do innej strony, nadal wyświetla tę wiadomość. Jak mogę go usunąć, jeśli wyświetla się przynajmniej raz?
Henry Bui,