EntitySchemaSubscriber.php in Drupal 8
File
core/modules/system/tests/modules/entity_test_update/src/EventSubscriber/EntitySchemaSubscriber.php
View source
<?php
namespace Drupal\entity_test_update\EventSubscriber;
use Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface;
use Drupal\Core\Entity\EntityTypeEventSubscriberTrait;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\EntityTypeListenerInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\State\StateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class EntitySchemaSubscriber implements EntityTypeListenerInterface, EventSubscriberInterface {
use EntityTypeEventSubscriberTrait;
protected $entityDefinitionUpdateManager;
protected $state;
public function __construct(EntityDefinitionUpdateManagerInterface $entityDefinitionUpdateManager, StateInterface $state) {
$this->entityDefinitionUpdateManager = $entityDefinitionUpdateManager;
$this->state = $state;
}
public static function getSubscribedEvents() {
return static::getEntityTypeEvents();
}
public function onEntityTypeCreate(EntityTypeInterface $entity_type) {
if (!$this->state
->get('entity_test_update.install_new_base_field_during_create', FALSE)) {
return;
}
$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']);
}
public function onEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeInterface $original) {
if (!$this->state
->get('entity_test_update.install_new_base_field_during_update', FALSE)) {
return;
}
$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']);
}
}