Magento 2: Добавьте сообщение об успешном завершении с идентификатором


В Коллекции Сообщений Magento /vendor/magento/framework/Message/Collection.php.

Существует два способа получения и удаления сообщения по идентификатору, getMessageByIdentifier и deleteMessageByIdentifier. Но у меня не было никакого способа установить сообщение с идентификатором, кто-нибудь знает, как установить идентификатор?

Author: Piyush, 2018-10-12

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 по этому сообщению.

Я надеюсь, что это поможет.

 0
Author: Marjan, 2018-10-12 08:13:49