FieldsFactory.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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\Framework\GraphQl\Config\Element;
  8. /**
  9. * Fields object factory
  10. */
  11. class FieldsFactory
  12. {
  13. /**
  14. * @var ArgumentFactory
  15. */
  16. private $argumentFactory;
  17. /**
  18. * @var FieldFactory
  19. */
  20. private $fieldFactory;
  21. /**
  22. * @param ArgumentFactory $argumentFactory
  23. * @param FieldFactory $fieldFactory
  24. */
  25. public function __construct(
  26. ArgumentFactory $argumentFactory,
  27. FieldFactory $fieldFactory
  28. ) {
  29. $this->argumentFactory = $argumentFactory;
  30. $this->fieldFactory = $fieldFactory;
  31. }
  32. /**
  33. * Create a fields object from a configured array with optional arguments.
  34. *
  35. * Field data must contain name and type. Other values are optional and include required, itemType, description,
  36. * and resolver. Arguments array must be in the format of [$argumentData['name'] => $argumentData].
  37. *
  38. * @param array $fieldsData
  39. * @return Field[]
  40. */
  41. public function createFromConfigData(
  42. array $fieldsData
  43. ) : array {
  44. $fields = [];
  45. foreach ($fieldsData as $fieldData) {
  46. $arguments = [];
  47. foreach ($fieldData['arguments'] as $argumentData) {
  48. $arguments[$argumentData['name']] = $this->argumentFactory->createFromConfigData($argumentData);
  49. }
  50. $fields[$fieldData['name']] = $this->fieldFactory->createFromConfigData(
  51. $fieldData,
  52. $arguments
  53. );
  54. }
  55. return $fields;
  56. }
  57. }