entityTypeManager = $entity_type_manager; $this->renderer = $renderer; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('entity_type.manager'), $container->get('renderer') ); } /** * Pre-render callback to build the page title. * * @param array $page * A page render array. * * @return array * The changed page render array. */ public function buildTitle(array $page) { $entity_type = $page['#entity_type']; $entity = $page['#' . $entity_type]; // If the entity's label is rendered using a field formatter, set the // rendered title field formatter as the page title instead of the default // plain text title. This allows attributes set on the field to propagate // correctly (e.g. RDFa, in-place editing). if ($entity instanceof FieldableEntityInterface) { $label_field = $entity->getEntityType()->getKey('label'); if (isset($page[$label_field])) { $page['#title'] = $this->renderer->render($page[$label_field]); } } return $page; } /** * Provides a page to render a single entity. * * @param \Drupal\Core\Entity\EntityInterface $_entity * The Entity to be rendered. Note this variable is named $_entity rather * than $entity to prevent collisions with other named placeholders in the * route. * @param string $view_mode * (optional) The view mode that should be used to display the entity. * Defaults to 'full'. * * @return array * A render array as expected by * \Drupal\Core\Render\RendererInterface::render(). */ public function view(EntityInterface $_entity, $view_mode = 'full') { $page = $this->entityTypeManager ->getViewBuilder($_entity->getEntityTypeId()) ->view($_entity, $view_mode); $page['#pre_render'][] = [$this, 'buildTitle']; $page['#entity_type'] = $_entity->getEntityTypeId(); $page['#' . $page['#entity_type']] = $_entity; return $page; } /** * {@inheritdoc} */ public static function trustedCallbacks() { return ['buildTitle']; } /** * Provides a page to render a single entity revision. * * @param \Drupal\Core\Entity\EntityInterface $_entity_revision * The Entity to be rendered. Note this variable is named $_entity_revision * rather than $entity to prevent collisions with other named placeholders * in the route. * @param string $view_mode * (optional) The view mode that should be used to display the entity. * Defaults to 'full'. * * @return array * A render array. */ public function viewRevision(EntityInterface $_entity_revision, $view_mode = 'full') { return $this->view($_entity_revision, $view_mode); } }