You are here

class RenderContext in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Render/RenderContext.php \Drupal\Core\Render\RenderContext
  2. 9 core/lib/Drupal/Core/Render/RenderContext.php \Drupal\Core\Render\RenderContext

The render context: a stack containing bubbleable rendering metadata.

A stack of \Drupal\Core\Render\BubbleableMetadata objects.

Hierarchy

  • class \Drupal\Core\Render\RenderContext extends \Drupal\Core\Render\SplStack

Expanded class hierarchy of RenderContext

See also

\Drupal\Core\Render\RendererInterface

\Drupal\Core\Render\Renderer

\Drupal\Core\Render\BubbleableMetadata

40 files declare their use of RenderContext
AssertContentTrait.php in core/tests/Drupal/KernelTests/AssertContentTrait.php
CacheTest.php in core/modules/views/tests/src/Kernel/Plugin/CacheTest.php
CommentFieldNameTest.php in core/modules/comment/tests/src/Kernel/Views/CommentFieldNameTest.php
EarlyRenderingControllerWrapperSubscriber.php in core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php
EntityResource.php in core/modules/jsonapi/src/Controller/EntityResource.php

... See full list

File

core/lib/Drupal/Core/Render/RenderContext.php, line 14

Namespace

Drupal\Core\Render
View source
class RenderContext extends \SplStack {

  /**
   * Updates the current frame of the stack.
   *
   * @param array &$element
   *   The element of the render array that has just been rendered. The stack
   *   frame for this element will be updated with the bubbleable rendering
   *   metadata of this element.
   */
  public function update(&$element) {

    // The latest frame represents the bubbleable metadata for the subtree.
    $frame = $this
      ->pop();

    // Update the frame, but also update the current element, to ensure it
    // contains up-to-date information in case it gets render cached.
    $updated_frame = BubbleableMetadata::createFromRenderArray($element)
      ->merge($frame);
    $updated_frame
      ->applyTo($element);
    $this
      ->push($updated_frame);
  }

  /**
   * Bubbles the stack.
   *
   * Whenever another level in the render array has been rendered, the stack
   * must be bubbled, to merge its rendering metadata with that of the parent
   * element.
   */
  public function bubble() {

    // If there's only one frame on the stack, then this is the root call, and
    // we can't bubble up further. ::renderRoot() will reset the stack, but we
    // must not reset it here to allow users of ::executeInRenderContext() to
    // access the stack directly.
    if ($this
      ->count() === 1) {
      return;
    }

    // Merge the current and the parent stack frame.
    $current = $this
      ->pop();
    $parent = $this
      ->pop();
    $this
      ->push($current
      ->merge($parent));
  }

}

Members