Fields.php in GraphQL 8.4
File
src/Plugin/GraphQL/DataProducer/EntityDefinition/Fields.php
View source
<?php
namespace Drupal\graphql\Plugin\GraphQL\DataProducer\EntityDefinition;
use Drupal\Core\Entity\ContentEntityTypeInterface;
use Drupal\Core\Entity\EntityFieldManager;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\Entity\BaseFieldOverride;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\field\Entity\FieldConfig;
use Drupal\graphql\GraphQL\Execution\FieldContext;
use Drupal\graphql\Plugin\GraphQL\DataProducer\DataProducerPluginBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
class Fields extends DataProducerPluginBase implements ContainerFactoryPluginInterface {
protected $entityTypeManager;
protected $entityFieldManager;
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity_type.manager'), $container
->get('entity_field.manager'));
}
public function __construct(array $configuration, string $plugin_id, array $plugin_definition, EntityTypeManager $entity_type_manager, EntityFieldManager $entity_field_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
$this->entityFieldManager = $entity_field_manager;
}
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);
$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;
}
}
}
}
Classes
Name |
Description |
Fields |
Retrieve the list of fields from a given entity definition. |