src/Plugin/Filter/EntityEmbedFilter.php | 66 +++++++++++++++------------------ 1 file changed, 30 insertions(+), 36 deletions(-) diff --git a/src/Plugin/Filter/EntityEmbedFilter.php b/src/Plugin/Filter/EntityEmbedFilter.php index 0a946c3..f1d59c0 100644 --- a/src/Plugin/Filter/EntityEmbedFilter.php +++ b/src/Plugin/Filter/EntityEmbedFilter.php @@ -169,40 +169,37 @@ class EntityEmbedFilter extends FilterBase implements ContainerFactoryPluginInte } if ($entity instanceof EntityInterface) { - try { - // If a UUID was not used, but is available, add it to the HTML. - if (!$node->getAttribute('data-entity-uuid') && $uuid = $entity->uuid()) { - $node->setAttribute('data-entity-uuid', $uuid); - } - - $context = $this->getNodeAttributesAsArray($node); - $context += ['data-langcode' => $langcode]; - - // Due to render caching and delayed calls, filtering happens later - // in the rendering process through a '#pre_render' callback, so we - // need to generate a counter that takes into account all the - // relevant information about this field and the referenced entity - // that is being rendered. - // @see \Drupal\filter\Element\ProcessedText::preRenderText() - $recursive_render_id = $entity->uuid() . json_encode($context); - if (isset(static::$recursiveRenderDepth[$recursive_render_id])) { - static::$recursiveRenderDepth[$recursive_render_id]++; - } - else { - static::$recursiveRenderDepth[$recursive_render_id] = 1; - } - - // Protect ourselves from recursive rendering. - if (static::$recursiveRenderDepth[$recursive_render_id] > static::RECURSIVE_RENDER_LIMIT) { - $this->loggerFactory->get('entity')->error('Recursive rendering detected when rendering embedded entity %entity_type: %entity_id. Aborting rendering.', [ - '%entity_type' => $entity->getEntityTypeId(), - '%entity_id' => $entity->id(), - ]); - $this->replaceNodeContent($node, ''); - $result->setProcessedText(Html::serialize($dom)); - return $result; - } + // If a UUID was not used, but is available, add it to the HTML. + if (!$node->getAttribute('data-entity-uuid') && $uuid = $entity->uuid()) { + $node->setAttribute('data-entity-uuid', $uuid); + } + + $context = $this->getNodeAttributesAsArray($node); + $context += ['data-langcode' => $langcode]; + + // Due to render caching and delayed calls, filtering happens later + // in the rendering process through a '#pre_render' callback, so we + // need to generate a counter that takes into account all the + // relevant information about this field and the referenced entity + // that is being rendered. + // @see \Drupal\filter\Element\ProcessedText::preRenderText() + $recursive_render_id = $entity->uuid() . json_encode($context); + if (isset(static::$recursiveRenderDepth[$recursive_render_id])) { + static::$recursiveRenderDepth[$recursive_render_id]++; + } + else { + static::$recursiveRenderDepth[$recursive_render_id] = 1; + } + // Protect ourselves from recursive rendering. + if (static::$recursiveRenderDepth[$recursive_render_id] > static::RECURSIVE_RENDER_LIMIT) { + $this->loggerFactory->get('entity')->error('Recursive rendering detected when rendering embedded entity %entity_type: %entity_id. Aborting rendering.', [ + '%entity_type' => $entity->getEntityTypeId(), + '%entity_id' => $entity->id(), + ]); + $entity_output = ''; + } + else { $build = $this->builder->buildEntityEmbed($entity, $context); // We need to render the embedded entity: // - without replacing placeholders, so that the placeholders are @@ -218,9 +215,6 @@ class EntityEmbedFilter extends FilterBase implements ContainerFactoryPluginInte }); $result = $result->merge(BubbleableMetadata::createFromRenderArray($build)); } - catch (RecursiveRenderingException $e) { - watchdog_exception('entity_embed', $e); - } } $this->replaceNodeContent($node, $entity_output);