public function Fields::resolve in GraphQL 8.4
Resolves the list of fields for a given entity.
Respects the optional context parameters "bundle" and "field_types". If bundle context is set it resolves the fields only for that entity bundle. The same goes for field types when either base fields of configurable fields may be returned.
Parameters
\Drupal\Core\Entity\EntityTypeInterface $entity_definition: The entity type definition.
array|null $bundle_context: Bundle context.
string|null $field_types_context: Field types context.
\Drupal\graphql\GraphQL\Execution\FieldContext $field_context: Field context.
File
- src/
Plugin/ GraphQL/ DataProducer/ EntityDefinition/ Fields.php, line 118
Class
- Fields
- Retrieve the list of fields from a given entity definition.
Namespace
Drupal\graphql\Plugin\GraphQL\DataProducer\EntityDefinitionCode
public function resolve(EntityTypeInterface $entity_definition, ?array $bundle_context = NULL, ?string $field_types_context = NULL, FieldContext $field_context) : \Iterator {
if ($entity_definition instanceof ContentEntityTypeInterface) {
$entity_type_id = $entity_definition
->id();
if ($bundle_context) {
$key = $bundle_context['key'];
$fields = $this->entityFieldManager
->getFieldDefinitions($entity_type_id, $key);
// Set entity form default display as context.
$form_display_id = $entity_type_id . '.' . $key . '.default';
$form_display_context = $this->entityTypeManager
->getStorage('entity_form_display')
->load($form_display_id);
$field_context
->setContextValue('entity_form_display', $form_display_context);
}
else {
$fields = $this->entityFieldManager
->getFieldDefinitions($entity_type_id, $entity_type_id);
}
if ($field_types_context) {
foreach ($fields as $field) {
if ($field_types_context === 'BASE_FIELDS') {
if ($field instanceof BaseFieldDefinition) {
(yield $field);
}
}
elseif ($field_types_context === 'FIELD_CONFIG') {
if ($field instanceof FieldConfig || $field instanceof BaseFieldOverride) {
(yield $field);
}
}
else {
(yield $field);
}
}
}
else {
yield from $fields;
}
}
}