diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php b/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php index 7e8280a..9d7fa44 100644 --- a/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php +++ b/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php @@ -285,6 +285,8 @@ protected function formatFieldMultiple(array &$build_list, array $entities, Form foreach ($entities as $index => $entity) { /** @var \Drupal\Core\Field\FieldItemListInterface $items */ $items = $grouped_items[$index]; + // If a field key is explicitly not specified, it means we do not need the + // additional nesting level. if ($field_key) { $build = &$build_list[$index][$field_key]; } @@ -301,7 +303,7 @@ protected function formatFieldMultiple(array &$build_list, array $entities, Form * {@inheritdoc} */ public function buildField(FieldableEntityInterface $entity, FieldDefinitionInterface $field_definition, $type, $settings) { - $build_list = $this->buildFieldMultiple(array($entity), $field_definition, $type, $settings); + $build_list = $this->buildFieldMultiple([$entity], $field_definition, $type, $settings); return reset($build_list); } diff --git a/core/modules/views/src/Entity/Render/EntityFieldRenderer.php b/core/modules/views/src/Entity/Render/EntityFieldRenderer.php index 72bfb10..396bb91 100644 --- a/core/modules/views/src/Entity/Render/EntityFieldRenderer.php +++ b/core/modules/views/src/Entity/Render/EntityFieldRenderer.php @@ -119,6 +119,10 @@ public function query(QueryPluginBase $query) { * {@inheritdoc} */ public function preRender(array $values) { + if (isset($this->build) || empty($values)) { + return; + } + $this->buildFields($values); } @@ -131,10 +135,6 @@ public function preRender(array $values) { * @see \Drupal\Core\Entity\Entity\EntityViewDisplay */ protected function buildFields(array $values) { - if (isset($this->build) || empty($values)) { - return; - } - $build = []; /** @var \Drupal\Core\Entity\FieldableEntityInterface[][] $entities */ $entities = []; @@ -231,9 +231,12 @@ public function render(ResultRow $row, Field $field = NULL) { $build = []; if (isset($field)) { $field_id = $field->options['id']; - if (isset($this->build[$row->index][$field_id])) { - $build = $this->build[$row->index][$field_id]; + if (!isset($this->build[$row->index][$field_id])) { + $this->buildFields([$row]); } + $build = $this->build[$row->index][$field_id]; + // Free static cache to save memory. + unset($this->build[$row->index][$field_id]); } return $build;