function field_attach_view

Returns a renderable array for the fields on an entity.

Each field is displayed according to the display options specified in the $display parameter for the given view mode.

field_attach_prepare_view() and field_attach_view() are two halves of the same operation. It is safe to call field_attach_prepare_view() multiple times on the same entity before calling field_attach_view() on it, but calling any Field API operation on an entity between passing that entity to these two functions may yield incorrect results.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity with fields to render.

\Drupal\entity\Plugin\Core\Entity\EntityDisplay $display: The entity display object.

$langcode: The language the field values are to be shown in. If no language is provided the current language is used.

array $options: An associative array of additional options. See field_invoke_method() for details. Note: key "langcode" will be overridden inside this function.

Return value

array A renderable array for the field values.

Related topics

10 calls to field_attach_view()
DatetimeFieldTest::renderTestEntity in drupal/core/modules/datetime/lib/Drupal/datetime/Tests/DatetimeFieldTest.php
Renders a entity_test and sets the output in the internal browser.
EmailFieldTest::testEmailField in drupal/core/modules/email/lib/Drupal/email/Tests/EmailFieldTest.php
Tests e-mail field.
EntityRenderController::buildContent in drupal/core/lib/Drupal/Core/Entity/EntityRenderController.php
Implements \Drupal\Core\Entity\EntityRenderControllerInterface::buildContent().
FieldAttachOtherTest::testFieldAttachView in drupal/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
Test field_attach_view() and field_attach_prepare_view().
LinkFieldTest::renderTestEntity in drupal/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
Renders a test_entity and sets the output in the internal browser.

... See full list

File

drupal/core/modules/field/field.attach.inc, line 1435
Field attach API, allowing entities (nodes, users, ...) to be 'fieldable'.

Code

function field_attach_view(EntityInterface $entity, EntityDisplay $display, $langcode = NULL, array $options = array()) {

  // Ensure we are working with a BC mode entity.
  $entity = $entity
    ->getBCEntity();

  // Determine the actual language code to display for each field, given the
  // language codes available in the field data.
  $options['langcode'] = field_language($entity, NULL, $langcode);

  // For each instance, call the view() method on the formatter object handed
  // by the entity display.
  $target_function = function ($instance) use ($display) {
    return $display
      ->getFormatter($instance['field_name']);
  };
  $null = NULL;
  $output = field_invoke_method('view', $target_function, $entity, $null, $null, $options);

  // Remove the BC layer now.
  $entity = $entity
    ->getNGEntity();

  // Let other modules alter the renderable array.
  $view_mode = $display->originalMode;
  $context = array(
    'entity' => $entity,
    'view_mode' => $view_mode,
    'display_options' => $view_mode,
    'langcode' => $langcode,
  );
  drupal_alter('field_attach_view', $output, $context);

  // Reset the _field_view_prepared flag set in field_attach_prepare_view(),
  // in case the same entity is displayed with different settings later in
  // the request.
  unset($entity->_field_view_prepared);
  return $output;
}