Виджет по умолчанию, используемый для полей ссылок на объекты (за исключением полей ссылок на объекты для тегов таксономии), реализован с помощью EntityReferenceAutocompleteWidget
класс, который в своем элемент формы()
реализация возвращает следующий элемент формы.
$элемент += [
'#type' => 'entity_autocomplete',
'#target_type' => $this->getFieldSetting('target_type'),
'#selection_handler' => $this->getFieldSetting('handler'),
'#selection_settings' => $selection_settings,
// Элементы поля ссылки на объект сами обрабатывают проверку через
// ограничение ValidReference.
'#validate_reference' => ЛОЖЬ,
'#maxlength' => 1024,
'#default_value' => isset($referenced_entities[$delta]) ? $referenced_entities[$delta] : NULL,
'#size' => $this->getSetting('size'),
'#placeholder' => $this->getSetting('placeholder'),
];
Вместо form['field_name']['widget'][0]['target_id']['#default_value']
, код должен установить form['field_name']['widget'][0]['#default_value']
.
form['field_name']['widget'][0]['#default_value'] = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
В качестве примечания, чтобы изменить элемент(ы) формы, возвращаемый из виджета поля, Drupal делает hook_field_widget_complete_form_alter()
(и hook_field_widget_complete_WIDGET_TYPE_form_alter()
) для этой цели. Он имеет доступ к следующей информации.
- Экземпляр плагина виджета (
$контекст['виджет']
), что позволяет получить доступ к идентификатору виджета (например, entity_reference_autocomplete, entity_reference_autocomplete_tags) с $context['виджет']->getPluginId()
- Значения поля (
$контекст['элементы']
), что позволяет получить целевой тип ссылочного поля ($context['items']->getFieldDefinition()->getFieldStorageDefinition()->getSetting('target_type')
)или тип поля ($context['items']->getFieldDefinition()->getType()
), Например
Когда это возможно, предпочтительнее использовать этот хук для виджетов полей, а не крючок_form_alter()
.
media_field_widget_complete_form_alter()
является реализацией этого хука, сделанного модулем Media.