CompositeReader.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Communication\Config;
  7. use Magento\Framework\Config\ReaderInterface;
  8. /**
  9. * Composite reader for communication config.
  10. */
  11. class CompositeReader implements ReaderInterface
  12. {
  13. /**
  14. * @var ReaderInterface[]
  15. */
  16. private $readers;
  17. /**
  18. * Initialize dependencies.
  19. *
  20. * @param array $readers
  21. */
  22. public function __construct(array $readers)
  23. {
  24. usort(
  25. $readers,
  26. function ($firstItem, $secondItem) {
  27. if (!isset($firstItem['sortOrder']) || !isset($secondItem['sortOrder'])) {
  28. return 0;
  29. }
  30. return $firstItem['sortOrder'] <=> $secondItem['sortOrder'];
  31. }
  32. );
  33. $this->readers = [];
  34. foreach ($readers as $readerInfo) {
  35. if (!isset($readerInfo['reader'])) {
  36. continue;
  37. }
  38. $this->readers[] = $readerInfo['reader'];
  39. }
  40. }
  41. /**
  42. * Read config.
  43. *
  44. * @param string|null $scope
  45. * @return array
  46. */
  47. public function read($scope = null)
  48. {
  49. $result = [];
  50. foreach ($this->readers as $reader) {
  51. $result = array_replace_recursive($result, $reader->read($scope));
  52. }
  53. return $result;
  54. }
  55. }