QuoteValidationComposite.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Quote\Model\ValidationRules;
  8. use Magento\Quote\Model\Quote;
  9. /**
  10. * @inheritdoc
  11. */
  12. class QuoteValidationComposite implements QuoteValidationRuleInterface
  13. {
  14. /**
  15. * @var QuoteValidationRuleInterface[]
  16. */
  17. private $validationRules = [];
  18. /**
  19. * @param QuoteValidationRuleInterface[] $validationRules
  20. * @throws \InvalidArgumentException
  21. */
  22. public function __construct(array $validationRules)
  23. {
  24. foreach ($validationRules as $validationRule) {
  25. if (!($validationRule instanceof QuoteValidationRuleInterface)) {
  26. throw new \InvalidArgumentException(
  27. sprintf(
  28. 'Instance of the ValidationRuleInterface is expected, got %s instead.',
  29. get_class($validationRule)
  30. )
  31. );
  32. }
  33. }
  34. $this->validationRules = $validationRules;
  35. }
  36. /**
  37. * @inheritdoc
  38. */
  39. public function validate(Quote $quote): array
  40. {
  41. $aggregateResult = [];
  42. foreach ($this->validationRules as $validationRule) {
  43. $ruleValidationResult = $validationRule->validate($quote);
  44. foreach ($ruleValidationResult as $item) {
  45. if (!$item->isValid()) {
  46. array_push($aggregateResult, $item);
  47. }
  48. }
  49. }
  50. return $aggregateResult;
  51. }
  52. }