Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Messages.php
Go to the documentation of this file.
1 <?php
7 
9 
16 class Messages extends Template
17 {
23  protected $messages;
24 
30  protected $firstLevelTagName = 'div';
31 
37  protected $secondLevelTagName = 'div';
38 
44  protected $contentWrapTagName = 'div';
45 
51  protected $usedStorageTypes = [];
52 
58  protected $messageTypes = [
63  ];
64 
70  protected $messageFactory;
71 
77  protected $collectionFactory;
78 
84  protected $messageManager;
85 
89  private $interpretationStrategy;
90 
101  public function __construct(
102  Template\Context $context,
103  \Magento\Framework\Message\Factory $messageFactory,
104  \Magento\Framework\Message\CollectionFactory $collectionFactory,
105  \Magento\Framework\Message\ManagerInterface $messageManager,
106  Message\InterpretationStrategyInterface $interpretationStrategy,
107  array $data = []
108  ) {
109  $this->messageFactory = $messageFactory;
110  $this->collectionFactory = $collectionFactory;
111  $this->messageManager = $messageManager;
112  parent::__construct($context, $data);
113  $this->interpretationStrategy = $interpretationStrategy;
114  }
115 
122  public function setMessages(\Magento\Framework\Message\Collection $messages)
123  {
124  $this->messages = $messages;
125  return $this;
126  }
127 
134  public function addMessages(\Magento\Framework\Message\Collection $messages)
135  {
136  foreach ($messages->getItems() as $message) {
137  $this->getMessageCollection()->addMessage($message);
138  }
139  return $this;
140  }
141 
147  public function getMessageCollection()
148  {
149  if (!$this->messages instanceof \Magento\Framework\Message\Collection) {
150  $this->messages = $this->collectionFactory->create();
151  }
152  return $this->messages;
153  }
154 
162  {
163  $this->getMessageCollection()->addMessage($message);
164  return $this;
165  }
166 
173  public function addError($message)
174  {
175  $this->addMessage($this->messageFactory->create(MessageInterface::TYPE_ERROR, $message));
176  return $this;
177  }
178 
185  public function addWarning($message)
186  {
187  $this->addMessage($this->messageFactory->create(MessageInterface::TYPE_WARNING, $message));
188  return $this;
189  }
190 
197  public function addNotice($message)
198  {
199  $this->addMessage($this->messageFactory->create(MessageInterface::TYPE_NOTICE, $message));
200  return $this;
201  }
202 
209  public function addSuccess($message)
210  {
211  $this->addMessage($this->messageFactory->create(MessageInterface::TYPE_SUCCESS, $message));
212  return $this;
213  }
214 
221  public function getMessagesByType($type)
222  {
223  return $this->getMessageCollection()->getItemsByType($type);
224  }
225 
231  public function getMessageTypes()
232  {
233  return $this->messageTypes;
234  }
235 
241  public function getGroupedHtml()
242  {
243  $html = $this->_renderMessagesByType();
244  $this->_dispatchRenderGroupedAfterEvent($html);
245  return $html;
246  }
247 
254  protected function _dispatchRenderGroupedAfterEvent(&$html)
255  {
256  $transport = new \Magento\Framework\DataObject(['output' => $html]);
257  $params = [
258  'element_name' => $this->getNameInLayout(),
259  'layout' => $this->getLayout(),
260  'transport' => $transport,
261  ];
262  $this->_eventManager->dispatch('view_message_block_render_grouped_html_after', $params);
263  $html = $transport->getData('output');
264  }
265 
271  protected function _renderMessagesByType()
272  {
273  $html = '';
274  foreach ($this->getMessageTypes() as $type) {
275  if ($messages = $this->getMessagesByType($type)) {
276  if (!$html) {
277  $html .= '<' . $this->firstLevelTagName . ' class="messages">';
278  }
279 
280  foreach ($messages as $message) {
281  $html .= '<' . $this->secondLevelTagName . ' class="message ' . 'message-' . $type . ' ' . $type .
282  '">';
283  $html .= '<' . $this->contentWrapTagName . $this->getUiId('message', $type) . '>';
284  $html .= $this->interpretationStrategy->interpret($message);
285  $html .= '</' . $this->contentWrapTagName . '>';
286  $html .= '</' . $this->secondLevelTagName . '>';
287  }
288  }
289  }
290  if ($html) {
291  $html .= '</' . $this->firstLevelTagName . '>';
292  }
293  return $html;
294  }
295 
301  protected function _toHtml()
302  {
303  if ($this->getTemplate()) {
304  $html = parent::_toHtml();
305  } else {
306  $html = $this->_renderMessagesByType();
307  }
308  return $html;
309  }
310 
317  public function setFirstLevelTagName($tagName)
318  {
319  $this->firstLevelTagName = $tagName;
320  }
321 
328  public function setSecondLevelTagName($tagName)
329  {
330  $this->secondLevelTagName = $tagName;
331  }
332 
338  public function getCacheKeyInfo()
339  {
340  return ['storage_types' => implode('|', $this->usedStorageTypes)];
341  }
342 
349  public function addStorageType($type)
350  {
351  $this->usedStorageTypes[] = $type;
352  }
353 }
__construct(Template\Context $context, \Magento\Framework\Message\Factory $messageFactory, \Magento\Framework\Message\CollectionFactory $collectionFactory, \Magento\Framework\Message\ManagerInterface $messageManager, Message\InterpretationStrategyInterface $interpretationStrategy, array $data=[])
Definition: Messages.php:101
addMessages(\Magento\Framework\Message\Collection $messages)
Definition: Messages.php:134
getUiId($arg1=null, $arg2=null, $arg3=null, $arg4=null, $arg5=null)
addMessage(MessageInterface $message)
Definition: Messages.php:161
$message
$type
Definition: item.phtml:13
setMessages(\Magento\Framework\Message\Collection $messages)
Definition: Messages.php:122
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18