class EntityViewController in Zircon Profile 8.0
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Entity/Controller/EntityViewController.php \Drupal\Core\Entity\Controller\EntityViewController
Defines a generic controller to render a single entity.
Hierarchy
- class \Drupal\Core\Entity\Controller\EntityViewController implements ContainerInjectionInterface
Expanded class hierarchy of EntityViewController
2 files declare their use of EntityViewController
- NodePreviewController.php in core/
modules/ node/ src/ Controller/ NodePreviewController.php - Contains \Drupal\node\Controller\NodePreviewController.
- NodeViewController.php in core/
modules/ node/ src/ Controller/ NodeViewController.php - Contains \Drupal\node\Controller\NodeViewController.
File
- core/
lib/ Drupal/ Core/ Entity/ Controller/ EntityViewController.php, line 20 - Contains \Drupal\Core\Entity\Controller\EntityViewController.
Namespace
Drupal\Core\Entity\ControllerView source
class EntityViewController implements ContainerInjectionInterface {
/**
* The entity manager
*
* @var \Drupal\Core\Entity\EntityManagerInterface
*/
protected $entityManager;
/**
* The renderer service.
*
* @var \Drupal\Core\Render\RendererInterface
*/
protected $renderer;
/**
* Creates an EntityViewController object.
*
* @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
* The entity manager.
* @param \Drupal\Core\Render\RendererInterface $renderer
* The renderer service.
*/
public function __construct(EntityManagerInterface $entity_manager, RendererInterface $renderer) {
$this->entityManager = $entity_manager;
$this->renderer = $renderer;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('entity.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_render().
*/
public function view(EntityInterface $_entity, $view_mode = 'full') {
$page = $this->entityManager
->getViewBuilder($_entity
->getEntityTypeId())
->view($_entity, $view_mode);
$page['#pre_render'][] = [
$this,
'buildTitle',
];
$page['#entity_type'] = $_entity
->getEntityTypeId();
$page['#' . $page['#entity_type']] = $_entity;
return $page;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
EntityViewController:: |
protected | property | The entity manager | |
EntityViewController:: |
protected | property | The renderer service. | |
EntityViewController:: |
public | function | Pre-render callback to build the page title. | |
EntityViewController:: |
public static | function |
Instantiates a new instance of this class. Overrides ContainerInjectionInterface:: |
|
EntityViewController:: |
public | function | Provides a page to render a single entity. | 2 |
EntityViewController:: |
public | function | Creates an EntityViewController object. |