You are here

public function EntityReferenceRevisionsEntityFormatter::viewElements in Entity Reference Revisions 8

Builds a renderable array for a field value.

Parameters

\Drupal\Core\Field\FieldItemListInterface $items: The field values to be rendered.

string $langcode: The language that should be used to render the field.

Return value

array A renderable array for $items, as an array of child elements keyed by consecutive numeric indexes starting from 0.

Overrides FormatterInterface::viewElements

File

src/Plugin/Field/FieldFormatter/EntityReferenceRevisionsEntityFormatter.php, line 127

Class

EntityReferenceRevisionsEntityFormatter
Plugin implementation of the 'entity reference rendered entity' formatter.

Namespace

Drupal\entity_reference_revisions\Plugin\Field\FieldFormatter

Code

public function viewElements(FieldItemListInterface $items, $langcode) {
  $view_mode = $this
    ->getSetting('view_mode');
  $elements = array();
  foreach ($this
    ->getEntitiesToView($items, $langcode) as $delta => $entity) {

    // Protect ourselves from recursive rendering.
    static $depth = 0;
    $depth++;
    if ($depth > 20) {
      $this->loggerFactory
        ->get('entity')
        ->error('Recursive rendering detected when rendering entity @entity_type @entity_id. Aborting rendering.', array(
        '@entity_type' => $entity
          ->getEntityTypeId(),
        '@entity_id' => $entity
          ->id(),
      ));
      return $elements;
    }
    $view_builder = \Drupal::entityTypeManager()
      ->getViewBuilder($entity
      ->getEntityTypeId());
    $elements[$delta] = $view_builder
      ->view($entity, $view_mode, $entity
      ->language()
      ->getId());

    // Add a resource attribute to set the mapping property's value to the
    // entity's url. Since we don't know what the markup of the entity will
    // be, we shouldn't rely on it for structured data such as RDFa.
    if (!empty($items[$delta]->_attributes) && !$entity
      ->isNew() && $entity
      ->hasLinkTemplate('canonical')) {
      $items[$delta]->_attributes += array(
        'resource' => $entity
          ->toUrl()
          ->toString(),
      );
    }
    $depth = 0;
  }
  return $elements;
}