Magento 2: Добавьте сообщение об успешном завершении с идентификатором
В Коллекции Сообщений Magento /vendor/magento/framework/Message/Collection.php.
Существует два способа получения и удаления сообщения по идентификатору, getMessageByIdentifier
и deleteMessageByIdentifier
. Но у меня не было никакого способа установить сообщение с идентификатором, кто-нибудь знает, как установить идентификатор?
1 answers
В этом конкретном классе /vendor/magento/framework/Message/Collection.php
есть метод addMessage
, который выглядит как
/**
* Adding new message to collection
*
* @param MessageInterface $message
* @return $this
*/
public function addMessage(MessageInterface $message)
{
if (!isset($this->messages[$message->getType()])) {
$this->messages[$message->getType()] = [];
}
// Prevent adding duplicate messages.
$foundIndex = array_search($message, $this->messages[$message->getType()], false);
if (false === $foundIndex) {
$this->messages[$message->getType()][] = $message;
$this->lastAddedMessage = $message;
} else {
$this->lastAddedMessage = $this->messages[$message->getType()] [$foundIndex];
}
return $this;
}
Видите ли, этот метод принимает @param MessageInterface $message
.
Если вы откроете /vendor/magento/framework/Message/MessageInterface.php
, вы заметите, что существует setIdentifier
обязательный
/**
* Setter message identifier
*
* @param string $identifier
* @return $this
*/
public function setIdentifier($identifier);
Итак, способ установить идентификатор - это сделать это для объекта типа Magento\Framework\Message\MessageInterface
, или, если быть еще более точным, типа Magento\Framework\Message\AbstractMessage
, потому что этот абстрактный класс на самом деле implements MessageInterface
.
В любом случае, предположим, что вы ввели интерфейс Menager в свой класс как
/*
* @param \Magento\Framework\Message\ManagerInterface $messageManager
*/
public function __construct(
\Magento\Framework\Message\ManagerInterface $messageManager
) {
$this->messageManager = $messageManager;
}
Вы должны быть в состоянии написать что-то подобное в своем методе в том же классе
$messages = $this->messageManager->getMessages();
$message = $messages->getLastAddedMessage();
if ($message) {
$message->setIdentifier('YOUR_ID_HERE')->setIsSticky(true);
}
//РЕДАКТИРОВАТЬ
Пожалуйста, обратите внимание, что $this->messageManager->getMessages()
возвращает коллекцию сообщений, ту, которую вы упомянули Magento\Framework\Message\Collection
, поэтому, если вам нужно что-либо, кроме последнего сообщения, вы можете просто отфильтровать эту коллекцию или просмотреть ее, чтобы получить нужное вам сообщение, а затем просто позвонить setIdentifier
по этому сообщению.
Я надеюсь, что это поможет.