You are here

private function DefaultsSectionStorage::extractEntityFromRoute in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/layout_builder/src/Plugin/SectionStorage/DefaultsSectionStorage.php \Drupal\layout_builder\Plugin\SectionStorage\DefaultsSectionStorage::extractEntityFromRoute()

Extracts an entity from the route values.

Parameters

mixed $value: The raw value from the route.

array $defaults: The route defaults array.

Return value

\Drupal\Core\Entity\EntityInterface|null The entity for the route, or NULL if none exist.

See also

\Drupal\layout_builder\SectionStorageInterface::deriveContextsFromRoute()

\Drupal\Core\ParamConverter\ParamConverterInterface::convert()

1 call to DefaultsSectionStorage::extractEntityFromRoute()
DefaultsSectionStorage::deriveContextsFromRoute in core/modules/layout_builder/src/Plugin/SectionStorage/DefaultsSectionStorage.php
Derives the available plugin contexts from route values.

File

core/modules/layout_builder/src/Plugin/SectionStorage/DefaultsSectionStorage.php, line 256

Class

DefaultsSectionStorage
Defines the 'defaults' section storage type.

Namespace

Drupal\layout_builder\Plugin\SectionStorage

Code

private function extractEntityFromRoute($value, array $defaults) {

  // If a bundle is not provided but a value corresponding to the bundle key
  // is, use that for the bundle value.
  if (empty($defaults['bundle']) && isset($defaults['bundle_key']) && !empty($defaults[$defaults['bundle_key']])) {
    $defaults['bundle'] = $defaults[$defaults['bundle_key']];
  }
  if (is_string($value) && strpos($value, '.') !== FALSE) {
    list($entity_type_id, $bundle, $view_mode) = explode('.', $value, 3);
  }
  elseif (!empty($defaults['entity_type_id']) && !empty($defaults['bundle']) && !empty($defaults['view_mode_name'])) {
    $entity_type_id = $defaults['entity_type_id'];
    $bundle = $defaults['bundle'];
    $view_mode = $defaults['view_mode_name'];
    $value = "{$entity_type_id}.{$bundle}.{$view_mode}";
  }
  else {
    return NULL;
  }
  $storage = $this->entityTypeManager
    ->getStorage('entity_view_display');

  // If the display does not exist, create a new one.
  if (!($display = $storage
    ->load($value))) {
    $display = $storage
      ->create([
      'targetEntityType' => $entity_type_id,
      'bundle' => $bundle,
      'mode' => $view_mode,
      'status' => TRUE,
    ]);
  }
  return $display;
}