final class EntityWarmer in Warmer 8
Same name and namespace in other branches
- 2.x modules/warmer_entity/src/Plugin/warmer/EntityWarmer.php \Drupal\warmer_entity\Plugin\warmer\EntityWarmer
The cache warmer for the built-in entity cache.
Plugin annotation
@Warmer(
id = "entity",
label = @Translation("Entity"),
description = @Translation("Loads entities from the selected entity types & bundles to warm the entity cache.")
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\warmer\Plugin\WarmerPluginBase implements ConfigurableInterface, DependentPluginInterface, ContainerFactoryPluginInterface, PluginFormInterface, WarmerInterface
- class \Drupal\warmer_entity\Plugin\warmer\EntityWarmer
- class \Drupal\warmer\Plugin\WarmerPluginBase implements ConfigurableInterface, DependentPluginInterface, ContainerFactoryPluginInterface, PluginFormInterface, WarmerInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of EntityWarmer
File
- modules/
warmer_entity/ src/ Plugin/ warmer/ EntityWarmer.php, line 23
Namespace
Drupal\warmer_entity\Plugin\warmerView source
final class EntityWarmer extends WarmerPluginBase {
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
private $entityTypeManager;
/**
* The in-memory static entity cache.
*
* @var \Drupal\Core\Cache\MemoryCache\MemoryCacheInterface
*/
private $entityMemoryCache;
/**
* The list of all item IDs for all entities in the system.
*
* Consists of <entity-type-id>:<entity-id>.
*
* @var array
*/
private $iids = [];
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
$instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
assert($instance instanceof EntityWarmer);
$instance
->setEntityTypeManager($container
->get('entity_type.manager'));
$instance
->setEntityMemoryCache($container
->get('entity.memory_cache'));
return $instance;
}
/**
* Injects the entity type manager.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/
public function setEntityTypeManager(EntityTypeManagerInterface $entity_type_manager) {
$this->entityTypeManager = $entity_type_manager;
}
/**
* Injects the entity memory cache.
*
* @param \Drupal\Core\Cache\MemoryCache\MemoryCacheInterface $memory_cache
* The memory cache.
*/
public function setEntityMemoryCache(MemoryCacheInterface $memory_cache) {
$this->entityMemoryCache = $memory_cache;
}
/**
* {@inheritdoc}
*/
public function loadMultiple(array $ids = []) {
$ids_per_type = array_reduce($ids, function ($carry, $id) {
list($entity_type_id, $entity_id) = explode(':', $id);
if (empty($carry[$entity_type_id])) {
$carry[$entity_type_id] = [];
}
$carry[$entity_type_id][] = $entity_id;
return $carry;
}, []);
$output = [];
foreach ($ids_per_type as $entity_type_id => $entity_ids) {
try {
$output += $this->entityTypeManager
->getStorage($entity_type_id)
->loadMultiple($entity_ids);
// \Drupal\Core\Entity\EntityStorageBase::buildCacheId() is protected,
// so we blindly reset the whole static cache instead of specific IDs.
$this->entityMemoryCache
->deleteAll();
} catch (PluginException $exception) {
watchdog_exception('warmer', $exception);
} catch (DatabaseExceptionWrapper $exception) {
watchdog_exception('warmer', $exception);
}
}
return $output;
}
/**
* {@inheritdoc}
*/
public function warmMultiple(array $items = []) {
// The entity load already warms the entity cache. Do nothing.
return count($items);
}
/**
* {@inheritdoc}
* TODO: This is a naive implementation.
*/
public function buildIdsBatch($cursor) {
$configuration = $this
->getConfiguration();
if (empty($this->iids) && !empty($configuration['entity_types'])) {
$entity_bundle_pairs = array_filter(array_values($configuration['entity_types']));
sort($entity_bundle_pairs);
$this->iids = array_reduce($entity_bundle_pairs, function ($iids, $entity_bundle_pair) {
list($entity_type_id, $bundle) = explode(':', $entity_bundle_pair);
$entity_type = $this->entityTypeManager
->getDefinition($entity_type_id);
$bundle_key = $entity_type
->getKey('bundle');
$id_key = $entity_type
->getKey('id');
$query = $this->entityTypeManager
->getStorage($entity_type_id)
->getQuery();
if (!empty($id_key)) {
$query
->sort($id_key);
}
if (!empty($bundle_key)) {
$query
->condition($bundle_key, $bundle);
}
$results = $query
->execute();
$entity_ids = array_filter((array) array_values($results));
$iids = array_merge($iids, array_map(function ($id) use ($entity_type_id) {
return sprintf('%s:%s', $entity_type_id, $id);
}, $entity_ids));
return $iids;
}, []);
}
$cursor_position = is_null($cursor) ? -1 : array_search($cursor, $this->iids);
if ($cursor_position === FALSE) {
return [];
}
return array_slice($this->iids, $cursor_position + 1, (int) $this
->getBatchSize());
}
/**
* {@inheritdoc}
*/
public function addMoreConfigurationFormElements(array $form, SubformStateInterface $form_state) {
/** @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_info */
$bundle_info = \Drupal::service('entity_type.bundle.info');
$options = [];
foreach ($this->entityTypeManager
->getDefinitions() as $entity_type) {
$bundles = $bundle_info
->getBundleInfo($entity_type
->id());
$label = (string) $entity_type
->getLabel();
$entity_type_id = $entity_type
->id();
$options[$label] = [];
foreach ($bundles as $bundle_id => $bundle_data) {
$options[$label][sprintf('%s:%s', $entity_type_id, $bundle_id)] = $bundle_data['label'];
}
}
$configuration = $this
->getConfiguration();
$form['entity_types'] = [
'#type' => 'select',
'#title' => $this
->t('Entity Types'),
'#description' => $this
->t('Enable the entity types to warm asynchronously.'),
'#options' => $options,
'#default_value' => empty($configuration['entity_types']) ? [] : $configuration['entity_types'],
'#multiple' => TRUE,
'#attributes' => [
'style' => 'min-height: 60em;',
],
];
return $form;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
EntityWarmer:: |
private | property | The in-memory static entity cache. | |
EntityWarmer:: |
private | property | The entity type manager. | |
EntityWarmer:: |
private | property | The list of all item IDs for all entities in the system. | |
EntityWarmer:: |
public | function |
Adds additional form elements to the configuration form. Overrides WarmerInterface:: |
|
EntityWarmer:: |
public | function |
TODO: This is a naive implementation. Overrides WarmerInterface:: |
|
EntityWarmer:: |
public static | function |
Creates an instance of the plugin. Overrides WarmerPluginBase:: |
|
EntityWarmer:: |
public | function |
Loads multiple items based on their IDs. Overrides WarmerInterface:: |
|
EntityWarmer:: |
public | function | Injects the entity memory cache. | |
EntityWarmer:: |
public | function | Injects the entity type manager. | |
EntityWarmer:: |
public | function |
Warms multiple items. Overrides WarmerInterface:: |
|
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
WarmerPluginBase:: |
protected | property | The state service. | |
WarmerPluginBase:: |
protected | property | The time service. | |
WarmerPluginBase:: |
final public | function |
Form constructor. Overrides PluginFormInterface:: |
|
WarmerPluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
|
WarmerPluginBase:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurableInterface:: |
1 |
WarmerPluginBase:: |
public | function |
Returns the batch size for the warming operation. Overrides WarmerInterface:: |
|
WarmerPluginBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
WarmerPluginBase:: |
public | function |
Returns the frequency for the warming operation. Overrides WarmerInterface:: |
|
WarmerPluginBase:: |
public | function |
Checks if the plugin should warm in this particular moment. Overrides WarmerInterface:: |
|
WarmerPluginBase:: |
public | function |
Marks a warmer as enqueued. Overrides WarmerInterface:: |
|
WarmerPluginBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
|
WarmerPluginBase:: |
public | function |
Form submission handler. Overrides PluginFormInterface:: |
2 |
WarmerPluginBase:: |
public | function |
Form validation handler. Overrides PluginFormInterface:: |
2 |
WarmerPluginBase:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase:: |