Рейтинг:1

Как установить значение по умолчанию для поля ссылки на объект пользователя в hook_form_alter()?

флаг us
CKL

Я попробовал следующий код, но он не работает.

$form['field_name']['widget'][0]['target_id']['#default_value'] = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id( ));
Рейтинг:1
флаг us

Виджет по умолчанию, используемый для полей ссылок на объекты (за исключением полей ссылок на объекты для тегов таксономии), реализован с помощью 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.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.