Exception.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * \Exception class for validator
  4. *
  5. * Copyright © Magento, Inc. All rights reserved.
  6. * See COPYING.txt for license details.
  7. */
  8. namespace Magento\Framework\Validator;
  9. use Magento\Framework\Exception\InputException;
  10. use Magento\Framework\Phrase;
  11. use Magento\Framework\Message\AbstractMessage;
  12. use Magento\Framework\Message\Error;
  13. /**
  14. * Exception to be thrown when data validation fails
  15. *
  16. * @api
  17. * @since 100.0.2
  18. */
  19. class Exception extends InputException
  20. {
  21. /**
  22. * @var array
  23. */
  24. protected $messages = [];
  25. /**
  26. * Constructor
  27. *
  28. * @param \Magento\Framework\Phrase $phrase
  29. * @param \Exception $cause
  30. * @param array $messages Validation error messages
  31. * @param int $code
  32. */
  33. public function __construct(
  34. Phrase $phrase = null,
  35. \Exception $cause = null,
  36. array $messages = [],
  37. $code = 0
  38. ) {
  39. if (!empty($messages)) {
  40. $message = '';
  41. foreach ($messages as $propertyMessages) {
  42. foreach ($propertyMessages as $propertyMessage) {
  43. if ($message) {
  44. $message .= PHP_EOL;
  45. }
  46. $message .= $propertyMessage;
  47. $this->addMessage(new Error($propertyMessage));
  48. }
  49. }
  50. $phrase = new Phrase($message);
  51. }
  52. parent::__construct($phrase, $cause, $code);
  53. }
  54. /**
  55. * Setter for message
  56. *
  57. * @param \Magento\Framework\Message\AbstractMessage $message
  58. * @return $this
  59. */
  60. public function addMessage(AbstractMessage $message)
  61. {
  62. if (!isset($this->messages[$message->getType()])) {
  63. $this->messages[$message->getType()] = [];
  64. }
  65. $this->messages[$message->getType()][] = $message;
  66. return $this;
  67. }
  68. /**
  69. * Getter for messages by type or all
  70. *
  71. * @param string $type
  72. * @return array
  73. */
  74. public function getMessages($type = '')
  75. {
  76. if ('' == $type) {
  77. $allMessages = [];
  78. foreach ($this->messages as $messages) {
  79. $allMessages = array_merge($allMessages, $messages);
  80. }
  81. return $allMessages;
  82. }
  83. return $this->messages[$type] ?? [];
  84. }
  85. }