Điểm:1

Làm cách nào để đặt giá trị mặc định cho trường tham chiếu thực thể người dùng trong hook_form_alter()?

lá cờ us
CKL

Tôi đã thử đoạn mã sau, nhưng nó không hoạt động.

$form['field_name']['widget'][0]['target_id']['#default_value'] = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id( ));
Điểm:1
lá cờ us

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.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.