Widgetul implicit utilizat pentru câmpurile de referință pentru entități (cu excepția câmpurilor de referință pentru entități pentru etichetele de taxonomie) este implementat de către EntityReferenceAutocompleteWidget
clasa care, în ea formElement()
implementare, returnează următorul element de formular.
$element += [
'#type' => 'entity_autocomplete',
'#target_type' => $this->getFieldSetting('target_type'),
'#selection_handler' => $this->getFieldSetting('handler'),
'#selection_settings' => $selection_settings,
// Articolele câmpului de referință al entității gestionează singure validarea prin
// constrângerea „ValidReference”.
'#validate_reference' => FALSE,
'#maxlength' => 1024,
'#default_value' => isset($referenced_entities[$delta]) ? $referenced_entities[$delta]: NULL,
'#size' => $this->getSetting('size'),
'#placeholder' => $this->getSetting('placeholder'),
];
În loc de form['field_name']['widget'][0]['target_id']['#default_value']
, codul ar trebui setat form['field_name']['widget'][0]['#default_value']
.
form['field_name']['widget'][0]['#default_value'] = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Ca o notă secundară, pentru a modifica elementul(ele) formularului returnat(e) dintr-un widget de câmp, Drupal make hook_field_widget_complete_form_alter()
(și hook_field_widget_complete_WIDGET_TYPE_form_alter()
) disponibile în acest scop. Are acces la următoarele informații.
- Instanța pluginului widget (
$context['widget']
), care permite accesarea ID-ului widgetului (de exemplu, entity_reference_autocomplete, entity_reference_autocomplete_tags) cu $context['widget']->getPluginId()
- Valorile câmpului (
$context['articole']
), care permite obținerea tipului țintă al câmpului de referință ($context['items']->getFieldDefinition()->getFieldStorageDefinition()->getSetting('target_type')
)sau tipul câmpului ($context['items']->getFieldDefinition()->getType()
), de exemplu
Când este posibil, ar trebui de preferat să utilizați acest cârlig pentru widget-uri de câmp, în loc de hook_form_alter()
.
media_field_widget_complete_form_alter()
este implementarea acelui cârlig realizată de modulul Media.