Вот другой вопрос с тем же полем ссылки на термин таксономии, которое я упомянул в мой предыдущий вопрос.
Пользователям с ролями «Администратор» и «Тренер» предоставляется разрешение на регистрацию пользователей «Студент» в пользовательском режиме формы «Добавить студента» (user_add_student_form
). Для UX было бы лучше, если бы я мог установить ['#значение по умолчанию']
принадлежащий select_a_school
поле ссылки термина таксономии на ту же школу, к которой принадлежит текущий вошедший в систему пользователь.
я работаю с крючок_form_alter()
в предварительной обработке шаблона, потому что так его настроил предыдущий разработчик:
/**
* Реализует hook_form_alter().
*/
функция projectname_form_alter(&$form, &$form_state, $form_id) {
// Получить текущего пользователя.
$current_user_proxy = \Drupal::currentUser();
$current_user_id = $current_user_proxy->id();
если (!$current_user_proxy->isAnonymous()) {
$currentUser = Пользователь::load($current_user_id);
// Получить школу текущего пользователя.
$currentSchool = $currentUser->field_select_a_school->getValue();
// Обработка формы добавления студента.
если ($ form_id == 'user_add_student_form') {
// Это работает.
$form['account']['roles']['#access'] = FALSE;
$form['аккаунт']['роли']['#default_value'] = [
0 => 'аутентифицированный',
1 => 'студент',
];
// Это не работает.
$form['field_select_a_school']['#default_value'] = $currentSchool;
}
Параметр $form['аккаунт']['роли']['#default_value']
работает, как и ожидалось, но поле ссылки на термин таксономии сопротивляется всем таким попыткам.
Я пробовал следующие варианты:
$form['field_select_a_school']['#default_value'] = $currentSchool;
$form['field_select_a_school']['#default_value'][] = $currentSchool;
$form['field_select_a_school']['widget']['#default_value'] = $currentSchool;
$form['field_select_a_school']['widget']['#default_value'][] = $currentSchool;
дамп ($ текущая школа);
Symfony VarDumper свалка()
из $currentSchool
похоже, что он содержит правильную структуру данных:
^ массив: 1 [∗¼
0 => массив: 1 [≥
"target_id" => "916"
]
]
Вот, для справки, соответствующий свалка()
для целевого поля в $форма
:
"field_select_a_school" => массив: 8 [₽
"#тип" => "контейнер"
"#parents" => массив: 1 [â¶]
"#атрибуты" => массив: 1 [â¶]
"виджет" => массив: 22 [ ¼
"#title" => "Выберите школу*"
"#описание" => ""
"#field_parents" => []
"#требуется" => верно
"#дельта" => 0
"#вес" => 0
"#element_validate" => массив: 1 [â¶]
"#key_column" => "target_id"
"#тип" => "выбрать"
"#options" => массив: 47 [◄]
"#значение_по умолчанию" => []
"#несколько" => ложь
"#shs" => массив: 7 [â¶]
"#атрибуты" => массив: 1 [â¶]
"#attached" => массив: 1 [â¶]
"#entity_type" => "пользователь"
"#комплект" => "пользователь"
"#after_build" => массив: 1 [▶]
"#field_name" => "field_select_a_school"
"#parents" => массив: 1 [â¶]
"#дерево" => правда
"#form_id" => "user_add_student_form"
]
"#доступ" => правда
"#вес" => 22
"#cache" => массив: 3 [○]
"#form_id" => "user_add_student_form"
]
Что бы я ни пытался, $form['field_select_a_school']['виджет']['#default_value']
всегда заканчивается пустым массивом. ¯\_(ã)_/¯
Что мне здесь не хватает?