StockValidatorChain.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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\InventoryApi\Model;
  8. use Magento\Framework\Exception\LocalizedException;
  9. use Magento\Framework\Validation\ValidationResult;
  10. use Magento\Framework\Validation\ValidationResultFactory;
  11. use Magento\InventoryApi\Api\Data\StockInterface;
  12. /**
  13. * Chain of validators. Extension point for new validators via di configuration
  14. *
  15. * @api
  16. */
  17. class StockValidatorChain implements StockValidatorInterface
  18. {
  19. /**
  20. * @var ValidationResultFactory
  21. */
  22. private $validationResultFactory;
  23. /**
  24. * @var StockValidatorInterface[]
  25. */
  26. private $validators;
  27. /**
  28. * @param ValidationResultFactory $validationResultFactory
  29. * @param StockValidatorInterface[] $validators
  30. * @throws LocalizedException
  31. */
  32. public function __construct(
  33. ValidationResultFactory $validationResultFactory,
  34. array $validators = []
  35. ) {
  36. $this->validationResultFactory = $validationResultFactory;
  37. foreach ($validators as $validator) {
  38. if (!$validator instanceof StockValidatorInterface) {
  39. throw new LocalizedException(
  40. __('Stock Validator must implement StockValidatorInterface.')
  41. );
  42. }
  43. }
  44. $this->validators = $validators;
  45. }
  46. /**
  47. * @inheritdoc
  48. */
  49. public function validate(StockInterface $stock): ValidationResult
  50. {
  51. $errors = [];
  52. foreach ($this->validators as $validator) {
  53. $validationResult = $validator->validate($stock);
  54. if (!$validationResult->isValid()) {
  55. $errors = array_merge($errors, $validationResult->getErrors());
  56. }
  57. }
  58. return $this->validationResultFactory->create(['errors' => $errors]);
  59. }
  60. }