Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
FieldMetaReader.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
11 
16 {
20  private $typeMetaReader;
21 
25  private $docReader;
26 
31  public function __construct(TypeMetaWrapperReader $typeMetaReader, DocReader $docReader)
32  {
33  $this->typeMetaReader = $typeMetaReader;
34  $this->docReader = $docReader;
35  }
36 
43  public function read(\GraphQL\Type\Definition\FieldDefinition $fieldMeta) : array
44  {
45  $fieldName = $fieldMeta->name;
46  $fieldTypeMeta = $fieldMeta->getType();
47  $result = [
48  'name' => $fieldName,
49  'arguments' => []
50  ];
51 
52  $fieldResolver = $this->getFieldResolver($fieldMeta);
53  if (!empty($fieldResolver)) {
54  $result['resolver'] = $fieldResolver;
55  }
56 
57  $result = array_merge(
58  $result,
59  $this->typeMetaReader->read($fieldTypeMeta, TypeMetaWrapperReader::OUTPUT_FIELD_PARAMETER)
60  );
61 
62  if ($this->docReader->read($fieldMeta->astNode->directives)) {
63  $result['description'] = $this->docReader->read($fieldMeta->astNode->directives);
64  }
65 
66  $arguments = $fieldMeta->args;
67  foreach ($arguments as $argumentMeta) {
68  $argumentName = $argumentMeta->name;
69  $result['arguments'][$argumentName] = [
70  'name' => $argumentName,
71  ];
72  if ($argumentMeta->defaultValue !== null) {
73  $result['arguments'][$argumentName]['defaultValue'] = $argumentMeta->defaultValue;
74  }
75  $typeMeta = $argumentMeta->getType();
76  $result['arguments'][$argumentName] = array_merge(
77  $result['arguments'][$argumentName],
78  $this->typeMetaReader->read($typeMeta, TypeMetaWrapperReader::ARGUMENT_PARAMETER)
79  );
80 
81  if ($this->docReader->read($argumentMeta->astNode->directives)) {
82  $result['arguments'][$argumentName]['description'] =
83  $this->docReader->read($argumentMeta->astNode->directives);
84  }
85  }
86  return $result;
87  }
88 
95  private function getFieldResolver(\GraphQL\Type\Definition\FieldDefinition $fieldMeta) : string
96  {
98  $directives = $fieldMeta->astNode->directives;
99  foreach ($directives as $directive) {
100  if ($directive->name->value == 'resolver') {
101  foreach ($directive->arguments as $directiveArgument) {
102  if ($directiveArgument->name->value == 'class') {
103  return $directiveArgument->value->value;
104  }
105  }
106  }
107  }
108  return '';
109  }
110 }
__construct(TypeMetaWrapperReader $typeMetaReader, DocReader $docReader)
$arguments