class EntitySchemaSubscriber in Drupal 10
Same name in this branch
- 10 core/modules/workspaces/src/EventSubscriber/EntitySchemaSubscriber.php \Drupal\workspaces\EventSubscriber\EntitySchemaSubscriber
- 10 core/modules/system/tests/modules/entity_test_update/src/EventSubscriber/EntitySchemaSubscriber.php \Drupal\entity_test_update\EventSubscriber\EntitySchemaSubscriber
Same name and namespace in other branches
- 8 core/modules/system/tests/modules/entity_test_update/src/EventSubscriber/EntitySchemaSubscriber.php \Drupal\entity_test_update\EventSubscriber\EntitySchemaSubscriber
- 9 core/modules/system/tests/modules/entity_test_update/src/EventSubscriber/EntitySchemaSubscriber.php \Drupal\entity_test_update\EventSubscriber\EntitySchemaSubscriber
Defines a class for listening to entity schema changes.
Hierarchy
- class \Drupal\entity_test_update\EventSubscriber\EntitySchemaSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface, EntityTypeListenerInterface uses EntityTypeEventSubscriberTrait
Expanded class hierarchy of EntitySchemaSubscriber
1 string reference to 'EntitySchemaSubscriber'
- entity_test_update.services.yml in core/
modules/ system/ tests/ modules/ entity_test_update/ entity_test_update.services.yml - core/modules/system/tests/modules/entity_test_update/entity_test_update.services.yml
1 service uses EntitySchemaSubscriber
- entity_test_update.entity_schema_listener in core/
modules/ system/ tests/ modules/ entity_test_update/ entity_test_update.services.yml - Drupal\entity_test_update\EventSubscriber\EntitySchemaSubscriber
File
- core/
modules/ system/ tests/ modules/ entity_test_update/ src/ EventSubscriber/ EntitySchemaSubscriber.php, line 17
Namespace
Drupal\entity_test_update\EventSubscriberView source
class EntitySchemaSubscriber implements EntityTypeListenerInterface, EventSubscriberInterface {
use EntityTypeEventSubscriberTrait;
/**
* The entity definition update manager.
*
* @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface
*/
protected $entityDefinitionUpdateManager;
/**
* The state service.
*
* @var \Drupal\Core\State\StateInterface
*/
protected $state;
/**
* Constructs a new EntitySchemaSubscriber.
*
* @param \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface $entityDefinitionUpdateManager
* The entity definition update manager.
* @param \Drupal\Core\State\StateInterface $state
* The state service.
*/
public function __construct(EntityDefinitionUpdateManagerInterface $entityDefinitionUpdateManager, StateInterface $state) {
$this->entityDefinitionUpdateManager = $entityDefinitionUpdateManager;
$this->state = $state;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() : array {
return static::getEntityTypeEvents();
}
/**
* {@inheritdoc}
*/
public function onEntityTypeCreate(EntityTypeInterface $entity_type) {
// Only add the new base field when a test needs it.
if (!$this->state
->get('entity_test_update.install_new_base_field_during_create', FALSE)) {
return;
}
// Add a new base field when the entity type is created.
$definitions = $this->state
->get('entity_test_update.additional_base_field_definitions', []);
$definitions['new_base_field'] = BaseFieldDefinition::create('string')
->setName('new_base_field')
->setLabel(new TranslatableMarkup('A new base field'));
$this->state
->set('entity_test_update.additional_base_field_definitions', $definitions);
$this->entityDefinitionUpdateManager
->installFieldStorageDefinition('new_base_field', 'entity_test_update', 'entity_test_update', $definitions['new_base_field']);
}
/**
* {@inheritdoc}
*/
public function onEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeInterface $original) {
// Only add the new base field when a test needs it.
if (!$this->state
->get('entity_test_update.install_new_base_field_during_update', FALSE)) {
return;
}
// Add a new base field when the entity type is updated.
$definitions = $this->state
->get('entity_test_update.additional_base_field_definitions', []);
$definitions['new_base_field'] = BaseFieldDefinition::create('string')
->setName('new_base_field')
->setLabel(new TranslatableMarkup('A new base field'));
$this->state
->set('entity_test_update.additional_base_field_definitions', $definitions);
$this->entityDefinitionUpdateManager
->installFieldStorageDefinition('new_base_field', 'entity_test_update', 'entity_test_update', $definitions['new_base_field']);
}
}