function EntityBundleInfoAlter::__invoke

Implements hook_entity_bundle_field_info_alter().

File

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

Class

EntityBundleInfoAlter
Alters media bundles.

Namespace

Drupal\media_test_oembed\Hook

Code

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 🎷',
      ],
    ]);
  }
}

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