MessageList.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Notification;
  7. /**
  8. * Class for processing the list of system messages
  9. *
  10. * Class MessageList
  11. * @api
  12. * @since 100.0.2
  13. */
  14. class MessageList
  15. {
  16. /**
  17. * List of configured message classes
  18. *
  19. * @var array
  20. */
  21. protected $_messageClasses;
  22. /**
  23. * List of messages
  24. *
  25. * @var array
  26. */
  27. protected $_messages;
  28. /**
  29. * @param \Magento\Framework\ObjectManagerInterface $objectManager
  30. * @param array $messages
  31. */
  32. public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager, $messages = [])
  33. {
  34. $this->_objectManager = $objectManager;
  35. $this->_messageClasses = $messages;
  36. }
  37. /**
  38. * Load messages to display
  39. *
  40. * @return void
  41. * @throws \InvalidArgumentException
  42. * @throws \UnexpectedValueException
  43. */
  44. protected function _loadMessages()
  45. {
  46. if (!empty($this->_messages)) {
  47. return;
  48. }
  49. foreach ($this->_messageClasses as $key => $messageClass) {
  50. if (!$messageClass) {
  51. throw new \InvalidArgumentException('Message class for message "' . $key . '" is not set');
  52. }
  53. $message = $this->_objectManager->get($messageClass);
  54. if ($message instanceof \Magento\Framework\Notification\MessageInterface) {
  55. $this->_messages[$message->getIdentity()] = $message;
  56. } else {
  57. throw new \UnexpectedValueException("Message class has to implement the message interface.");
  58. }
  59. }
  60. }
  61. /**
  62. * Retrieve message by
  63. *
  64. * @param string $identity
  65. * @return null|\Magento\Framework\Notification\MessageInterface
  66. */
  67. public function getMessageByIdentity($identity)
  68. {
  69. $this->_loadMessages();
  70. return $this->_messages[$identity] ?? null;
  71. }
  72. /**
  73. * Retrieve list of all messages
  74. *
  75. * @return \Magento\Framework\Notification\MessageInterface[]
  76. */
  77. public function asArray()
  78. {
  79. $this->_loadMessages();
  80. return $this->_messages;
  81. }
  82. }