<?php namespace Drupal\islandora\Form\AddChildrenWizard; use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Field\FieldDefinitionInterface; /** * Field lookup helper trait. */ trait FieldTrait { use MediaTypeTrait; /** * The entity field manager service. * * @var \Drupal\Core\Entity\EntityFieldManagerInterface|null */ protected ?EntityFieldManagerInterface $entityFieldManager = NULL; /** * Helper; get field instance, given our required values. * * @param array $values * See ::getMediaType() for which values are required. * * @return \Drupal\Core\Field\FieldDefinitionInterface * The target field. * * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ protected function getField(array $values): FieldDefinitionInterface { $media_type = $this->getMediaType($values); $media_source = $media_type->getSource(); $source_field = $media_source->getSourceFieldDefinition($media_type); $fields = $this->entityFieldManager()->getFieldDefinitions('media', $media_type->id()); return $fields[$source_field->getFieldStorageDefinition()->getName()] ?? $media_source->createSourceField($media_type); } /** * Lazy-initialization of the entity field manager service. * * @return \Drupal\Core\Entity\EntityFieldManagerInterface * The entity field manager service. */ protected function entityFieldManager() : EntityFieldManagerInterface { if ($this->entityFieldManager === NULL) { $this->setEntityFieldManager(\Drupal::service('entity_field.manager')); } return $this->entityFieldManager; } /** * Setter for entity field manager. */ public function setEntityFieldManager(EntityFieldManagerInterface $entity_field_manager) : self { $this->entityFieldManager = $entity_field_manager; return $this; } }