Tiện ích mặc định được sử dụng cho các trường tham chiếu thực thể (ngoại trừ các trường tham chiếu thực thể cho các thẻ phân loại) được triển khai bởi EntityReferenceAutocompleteWidget
lớp mà, trong nó formElement()
thực hiện, trả về phần tử biểu mẫu sau.
phần tử $ += [
'#type' => 'entity_autocomplete',
'#target_type' => $this->getFieldSetting('target_type'),
'#selection_handler' => $this->getFieldSetting('handler'),
'#selection_settings' => $selection_settings,
// Các mục trường tham chiếu thực thể đang tự xử lý xác thực thông qua
// ràng buộc 'ValidReference'.
'#validate_reference' => SAI,
'#maxlength' => 1024,
'#default_value' => isset($referenced_entities[$delta]) ? $referenced_entities[$delta] : NULL,
'#size' => $this->getSetting('size'),
'#placeholder' => $this->getSetting('placeholder'),
];
Thay vì biểu mẫu['field_name']['widget'][0]['target_id']['#default_value']
, mã nên đặt biểu mẫu['field_name']['widget'][0]['#default_value']
.
biểu mẫu['field_name']['widget'][0]['#default_value'] = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Như lưu ý phụ, để thay đổi (các) phần tử biểu mẫu được trả về từ tiện ích trường, Drupal tạo hook_field_widget_complete_form_alter()
(và hook_field_widget_complete_WIDGET_TYPE_form_alter()
) có sẵn cho mục đích này. Nó có quyền truy cập vào các thông tin sau đây.
- Phiên bản plugin widget (
$context['widget']
), cho phép truy cập ID tiện ích (ví dụ: thực thể_reference_autocomplete, entity_reference_autocomplete_tags) với $context['widget']->getPluginId()
- Các giá trị trường (
$context['items']
), cho phép lấy loại mục tiêu của trường tham chiếu ($context['items']->getFieldDefinition()->getFieldStorageDefinition()->getSetting('target_type')
) hoặc loại trường ($context['items']->getFieldDefinition()->getType()
), Ví dụ
Khi có thể, nên sử dụng hook này cho các widget hiện trường, thay vì hook_form_alter()
.
media_field_widget_complete_form_alter()
là việc triển khai hook đó được thực hiện bởi mô-đun Media.