Validator.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework;
  7. /**
  8. * Validator class that represents chain of validators.
  9. *
  10. * @api
  11. * @since 100.0.2
  12. */
  13. class Validator extends \Magento\Framework\Validator\AbstractValidator
  14. {
  15. /**
  16. * Validator chain
  17. *
  18. * @var array
  19. */
  20. protected $_validators = [];
  21. /**
  22. * Adds a validator to the end of the chain
  23. *
  24. * @param \Magento\Framework\Validator\ValidatorInterface $validator
  25. * @param boolean $breakChainOnFailure
  26. * @return \Magento\Framework\Validator
  27. */
  28. public function addValidator(
  29. \Magento\Framework\Validator\ValidatorInterface $validator,
  30. $breakChainOnFailure = false
  31. ) {
  32. if (!$validator->hasTranslator()) {
  33. $validator->setTranslator($this->getTranslator());
  34. }
  35. $this->_validators[] = [
  36. 'instance' => $validator,
  37. 'breakChainOnFailure' => (bool)$breakChainOnFailure,
  38. ];
  39. return $this;
  40. }
  41. /**
  42. * Returns true if and only if $value passes all validations in the chain
  43. *
  44. * @param mixed $value
  45. * @return boolean
  46. */
  47. public function isValid($value)
  48. {
  49. $result = true;
  50. $this->_clearMessages();
  51. /** @var $validator \Zend_Validate_Interface */
  52. foreach ($this->_validators as $element) {
  53. $validator = $element['instance'];
  54. if ($validator->isValid($value)) {
  55. continue;
  56. }
  57. $result = false;
  58. $this->_addMessages($validator->getMessages());
  59. if ($element['breakChainOnFailure']) {
  60. break;
  61. }
  62. }
  63. return $result;
  64. }
  65. /**
  66. * Set translator to chain.
  67. *
  68. * @param \Magento\Framework\Translate\AdapterInterface|null $translator
  69. * @return \Magento\Framework\Validator\AbstractValidator
  70. */
  71. public function setTranslator($translator = null)
  72. {
  73. foreach ($this->_validators as $validator) {
  74. $validator['instance']->setTranslator($translator);
  75. }
  76. return parent::setTranslator($translator);
  77. }
  78. }