EntityReferenceLabelFormatter.php in Drupal 9
File
core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php
View source
<?php
namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\Exception\UndefinedLinkTemplateException;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
class EntityReferenceLabelFormatter extends EntityReferenceFormatterBase {
public static function defaultSettings() {
return [
'link' => TRUE,
] + parent::defaultSettings();
}
public function settingsForm(array $form, FormStateInterface $form_state) {
$elements['link'] = [
'#title' => t('Link label to the referenced entity'),
'#type' => 'checkbox',
'#default_value' => $this
->getSetting('link'),
];
return $elements;
}
public function settingsSummary() {
$summary = [];
$summary[] = $this
->getSetting('link') ? t('Link to the referenced entity') : t('No link');
return $summary;
}
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = [];
$output_as_link = $this
->getSetting('link');
foreach ($this
->getEntitiesToView($items, $langcode) as $delta => $entity) {
$label = $entity
->label();
if ($output_as_link && !$entity
->isNew()) {
try {
$uri = $entity
->toUrl();
} catch (UndefinedLinkTemplateException $e) {
$output_as_link = FALSE;
}
}
if ($output_as_link && isset($uri) && !$entity
->isNew()) {
$elements[$delta] = [
'#type' => 'link',
'#title' => $label,
'#url' => $uri,
'#options' => $uri
->getOptions(),
];
if (!empty($items[$delta]->_attributes)) {
$elements[$delta]['#options'] += [
'attributes' => [],
];
$elements[$delta]['#options']['attributes'] += $items[$delta]->_attributes;
unset($items[$delta]->_attributes);
}
}
else {
$elements[$delta] = [
'#plain_text' => $label,
];
}
$elements[$delta]['#cache']['tags'] = $entity
->getCacheTags();
}
return $elements;
}
protected function checkAccess(EntityInterface $entity) {
return $entity
->access('view label', NULL, TRUE);
}
}