trait EntityViewTrait

Same name in other branches
  1. 8.9.x core/tests/Drupal/Tests/EntityViewTrait.php \Drupal\Tests\EntityViewTrait
  2. 10 core/tests/Drupal/Tests/EntityViewTrait.php \Drupal\Tests\EntityViewTrait
  3. 11.x core/tests/Drupal/Tests/EntityViewTrait.php \Drupal\Tests\EntityViewTrait

Provides helper methods to deal with building entity views in tests.

Hierarchy

4 files declare their use of EntityViewTrait
CommentOrphanTest.php in core/modules/comment/tests/src/Kernel/CommentOrphanTest.php
ImageFieldDefaultImagesTest.php in core/modules/image/tests/src/Functional/ImageFieldDefaultImagesTest.php
NodeEntityViewModeAlterTest.php in core/modules/node/tests/src/Functional/NodeEntityViewModeAlterTest.php
SummaryLengthTest.php in core/modules/node/tests/src/Kernel/SummaryLengthTest.php

File

core/tests/Drupal/Tests/EntityViewTrait.php, line 11

Namespace

Drupal\Tests
View source
trait EntityViewTrait {
    
    /**
     * Builds the renderable view of an entity.
     *
     * Entities postpone the composition of their renderable arrays to #pre_render
     * functions in order to maximize cache efficacy. This means that the full
     * renderable array for an entity is constructed in
     * \Drupal::service('renderer')->render(). Some tests require the complete
     * renderable array for an entity outside of the render process in order to
     * verify the presence of specific values. This method isolates the steps in
     * the render process that produce an entity's renderable array.
     *
     * @param \Drupal\Core\Entity\EntityInterface $entity
     *   The entity to prepare a renderable array for.
     * @param string $view_mode
     *   (optional) The view mode that should be used to build the entity.
     * @param null $langcode
     *   (optional) For which language the entity should be prepared, defaults to
     *   the current content language.
     *
     * @return array
     *
     * @see \Drupal\Core\Render\RendererInterface::render()
     */
    protected function buildEntityView(EntityInterface $entity, $view_mode = 'full', $langcode = NULL) {
        $ensure_fully_built = function (&$elements) use (&$ensure_fully_built) {
            // If the default values for this element have not been loaded yet, populate
            // them.
            if (isset($elements['#type']) && empty($elements['#defaults_loaded'])) {
                $elements += \Drupal::service('element_info')->getInfo($elements['#type']);
            }
            // Make any final changes to the element before it is rendered. This means
            // that the $element or the children can be altered or corrected before the
            // element is rendered into the final text.
            if (isset($elements['#pre_render'])) {
                foreach ($elements['#pre_render'] as $callable) {
                    $elements = call_user_func($callable, $elements);
                }
            }
            // And recurse.
            $children = Element::children($elements, TRUE);
            foreach ($children as $key) {
                $ensure_fully_built($elements[$key]);
            }
        };
        $render_controller = $this->container
            ->get('entity_type.manager')
            ->getViewBuilder($entity->getEntityTypeId());
        $build = $render_controller->view($entity, $view_mode, $langcode);
        $ensure_fully_built($build);
        return $build;
    }

}

Members

Title Sort descending Modifiers Object type Summary
EntityViewTrait::buildEntityView protected function Builds the renderable view of an entity.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.