protected EntityFieldManager::buildBundleFieldDefinitions($entity_type_id, $bundle, array $base_field_definitions)
Builds field definitions for a specific bundle within an entity type.
Parameters
string $entity_type_id: The entity type ID. Only entity types that implement \Drupal\Core\Entity\FieldableEntityInterface are supported.
string $bundle: The bundle.
\Drupal\Core\Field\FieldDefinitionInterface[] $base_field_definitions: The list of base field definitions.
Return value
\Drupal\Core\Field\FieldDefinitionInterface[] An array of bundle field definitions, keyed by field name. Does not include base fields.
File
- core/lib/Drupal/Core/Entity/EntityFieldManager.php, line 325
Class
- EntityFieldManager
- Manages the discovery of entity fields.
Namespace
Drupal\Core\Entity
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | protected function buildBundleFieldDefinitions( $entity_type_id , $bundle , array $base_field_definitions ) { $entity_type = $this ->entityTypeManager->getDefinition( $entity_type_id ); $class = $entity_type ->getClass(); // Allow the entity class to provide bundle fields and bundle-specific // overrides of base fields. $bundle_field_definitions = $class ::bundleFieldDefinitions( $entity_type , $bundle , $base_field_definitions ); // Load base field overrides from configuration. These take precedence over // base field overrides returned above. $base_field_override_ids = array_map ( function ( $field_name ) use ( $entity_type_id , $bundle ) { return $entity_type_id . '.' . $bundle . '.' . $field_name ; }, array_keys ( $base_field_definitions )); $base_field_overrides = $this ->entityTypeManager->getStorage( 'base_field_override' )->loadMultiple( $base_field_override_ids ); foreach ( $base_field_overrides as $base_field_override ) { /** @var \Drupal\Core\Field\Entity\BaseFieldOverride $base_field_override */ $field_name = $base_field_override ->getName(); $bundle_field_definitions [ $field_name ] = $base_field_override ; } $provider = $entity_type ->getProvider(); foreach ( $bundle_field_definitions as $definition ) { // @todo Remove this check once FieldDefinitionInterface exposes a proper // provider setter. See https://www.drupal.org/node/2225961. if ( $definition instanceof BaseFieldDefinition) { $definition ->setProvider( $provider ); } } // Retrieve base field definitions from modules. foreach ( $this ->moduleHandler->getImplementations( 'entity_bundle_field_info' ) as $module ) { $module_definitions = $this ->moduleHandler->invoke( $module , 'entity_bundle_field_info' , [ $entity_type , $bundle , $base_field_definitions ]); if (! empty ( $module_definitions )) { // Ensure the provider key actually matches the name of the provider // defining the field. foreach ( $module_definitions as $field_name => $definition ) { // @todo Remove this check once FieldDefinitionInterface exposes a // proper provider setter. See https://www.drupal.org/node/2225961. if ( $definition instanceof BaseFieldDefinition) { $definition ->setProvider( $module ); } $bundle_field_definitions [ $field_name ] = $definition ; } } } // Automatically set the field name, target entity type and bundle // for non-configurable fields. foreach ( $bundle_field_definitions as $field_name => $field_definition ) { if ( $field_definition instanceof BaseFieldDefinition) { $field_definition ->setName( $field_name ); $field_definition ->setTargetEntityTypeId( $entity_type_id ); $field_definition ->setTargetBundle( $bundle ); } } // Invoke 'per bundle' alter hook. $this ->moduleHandler->alter( 'entity_bundle_field_info' , $bundle_field_definitions , $entity_type , $bundle ); return $bundle_field_definitions ; } |
Please login to continue.