class EntityBundleInfoAlter

Alters media bundles.

Attributes

#[Hook('entity_bundle_field_info_alter')]

Hierarchy

Expanded class hierarchy of EntityBundleInfoAlter

1 file declares its use of EntityBundleInfoAlter
MediaSourceValidationTest.php in core/modules/media/tests/src/Kernel/MediaSourceValidationTest.php

File

core/modules/media/tests/modules/media_test_oembed/src/Hook/EntityBundleInfoAlter.php, line 15

Namespace

Drupal\media_test_oembed\Hook
View source
final class EntityBundleInfoAlter {
  public const STATE_FLAG = 'media_test_oembed_only_urls_fieldname';
  public function __construct(protected StateInterface $state) {
  }
  
  /**
   * Implements hook_entity_bundle_field_info_alter().
   */
  public function __invoke(array &$fields, EntityTypeInterface $entityType, string $bundle) : void {
    $constrained_fields_by_bundle = $this->state
      ->get(self::STATE_FLAG, []);
    if (\count($constrained_fields_by_bundle) === 0) {
      return;
    }
    $constrained_fields = \array_keys(\array_intersect_key($fields, \array_flip($constrained_fields_by_bundle[$bundle] ?? [])));
    if ($entityType->id() !== 'media' || \count($constrained_fields) === 0) {
      return;
    }
    foreach ($constrained_fields as $field_name) {
      \assert($fields[$field_name] instanceof FieldConfigInterface);
      $fields[$field_name]->addConstraint('UniqueField');
      $fields[$field_name]->addPropertyConstraints('value', [
        'AllowedValues' => [
          'choices' => [
            'https://www.youtube.com/watch?v=BnEgnrUCXPY',
            'https://www.youtube.com/watch?v=15Nqbic6HZs',
          ],
          'message' => 'This site only allows Jazz videos, try again cat 🎷',
        ],
      ]);
    }
  }

}

Members

Title Sort descending Modifiers Object type Summary
EntityBundleInfoAlter::STATE_FLAG public constant
EntityBundleInfoAlter::__construct public function
EntityBundleInfoAlter::__invoke public function Implements hook_entity_bundle_field_info_alter().

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.