class EntitySchemaTestHooks

Hook implementations for entity_schema_test.

Hierarchy

Expanded class hierarchy of EntitySchemaTestHooks

File

core/modules/system/tests/modules/entity_schema_test/src/Hook/EntitySchemaTestHooks.php, line 19

Namespace

Drupal\entity_schema_test\Hook
View source
class EntitySchemaTestHooks {
  use StringTranslationTrait;
  
  /**
   * Implements hook_entity_type_alter().
   */
  public function entityTypeAlter(array &$entity_types) : void {
    // Allow a test to tell us whether or not to alter the entity type.
    if (\Drupal::state()->get('entity_schema_update')) {
      $entity_type = $entity_types['entity_test_update'];
      if ($entity_type instanceof ContentEntityTypeInterface) {
        $entity_type->set('translatable', TRUE);
        $entity_type->set('data_table', 'entity_test_update_data');
        // Update the keys with a revision ID.
        $keys = $entity_type->getKeys();
        $keys['revision'] = 'revision_id';
        $entity_type->set('entity_keys', $keys);
        $entity_type->setRevisionMetadataKey('revision_log_message', 'revision_log');
      }
    }
  }
  
  /**
   * Implements hook_entity_base_field_info().
   */
  public function entityBaseFieldInfo(EntityTypeInterface $entity_type) : array {
    if ($entity_type->id() == 'entity_test_update') {
      $definitions['custom_base_field'] = BaseFieldDefinition::create('string')->setName('custom_base_field')
        ->setLabel($this->t('A custom base field'));
      if (\Drupal::state()->get('entity_schema_update')) {
        $definitions += EntityTestMulRev::baseFieldDefinitions($entity_type);
        // And add a revision log.
        $definitions['revision_log'] = BaseFieldDefinition::create('string_long')->setLabel($this->t('Revision log message'))
          ->setDescription($this->t('The log entry explaining the changes in this revision.'))
          ->setRevisionable(TRUE);
      }
      return $definitions;
    }
    return [];
  }
  
  /**
   * Implements hook_entity_field_storage_info().
   */
  public function entityFieldStorageInfo(EntityTypeInterface $entity_type) : array {
    if ($entity_type->id() == 'entity_test_update') {
      $definitions['custom_bundle_field'] = FieldStorageDefinition::create('string')->setName('custom_bundle_field')
        ->setLabel($this->t('A custom bundle field'))
        ->setRevisionable(TRUE)
        ->setTargetEntityTypeId($entity_type->id());
      return $definitions;
    }
    return [];
  }
  
  /**
   * Implements hook_entity_bundle_field_info().
   */
  public function entityBundleFieldInfo(EntityTypeInterface $entity_type, $bundle) : array {
    if ($entity_type->id() == 'entity_test_update' && $bundle == 'custom') {
      /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface $custom_bundle_field_storage */
      $custom_bundle_field_storage = $this->entityFieldStorageInfo($entity_type)['custom_bundle_field'];
      $definitions[$custom_bundle_field_storage->getName()] = FieldDefinition::createFromFieldStorageDefinition($custom_bundle_field_storage);
      return $definitions;
    }
    return [];
  }
  
  /**
   * Implements hook_entity_bundle_create().
   */
  public function entityBundleCreate($entity_type_id, $bundle) : void {
    if ($entity_type_id == 'entity_test_update' && $bundle == 'custom') {
      $field_definitions = \Drupal::service('entity_field.manager')->getFieldDefinitions($entity_type_id, $bundle);
      // Notify the entity storage that we just created a new field.
      \Drupal::service('field_definition.listener')->onFieldDefinitionCreate($field_definitions['custom_bundle_field']);
    }
  }
  
  /**
   * Implements hook_entity_bundle_delete().
   */
  public function entityBundleDelete($entity_type_id, $bundle) : void {
    if ($entity_type_id == 'entity_test_update' && $bundle == 'custom') {
      $field_definitions = \Drupal::service('entity_field.manager')->getFieldDefinitions($entity_type_id, $bundle);
      // Notify the entity storage that our field is gone.
      \Drupal::service('field_definition.listener')->onFieldDefinitionDelete($field_definitions['custom_bundle_field']);
      \Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionDelete($field_definitions['custom_bundle_field']->getFieldStorageDefinition());
    }
  }

}

Members

Title Sort descending Modifiers Object type Summary Overrides
EntitySchemaTestHooks::entityBaseFieldInfo public function Implements hook_entity_base_field_info().
EntitySchemaTestHooks::entityBundleCreate public function Implements hook_entity_bundle_create().
EntitySchemaTestHooks::entityBundleDelete public function Implements hook_entity_bundle_delete().
EntitySchemaTestHooks::entityBundleFieldInfo public function Implements hook_entity_bundle_field_info().
EntitySchemaTestHooks::entityFieldStorageInfo public function Implements hook_entity_field_storage_info().
EntitySchemaTestHooks::entityTypeAlter public function Implements hook_entity_type_alter().
StringTranslationTrait::$stringTranslation protected property The string translation service. 3
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language. 1

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