ต่อไปนี้เป็นคำถามอื่นที่มีฟิลด์อ้างอิงคำศัพท์อนุกรมวิธานเดียวกันกับที่ฉันกล่าวถึง คำถามก่อนหน้าของฉัน.
ผู้ใช้ที่มีบทบาทผู้ดูแลระบบและโค้ชได้รับอนุญาตให้ลงทะเบียนผู้ใช้ที่เป็นนักเรียนผ่านโหมดแบบฟอร์ม "เพิ่มนักเรียน" แบบกำหนดเอง (user_add_student_form
). มันจะดีกว่าสำหรับ UX ถ้าฉันสามารถตั้งค่า ['#default_value']
ของ เลือก_a_โรงเรียน
ฟิลด์อ้างอิงคำศัพท์อนุกรมวิธานไปยังโรงเรียนเดียวกันกับที่ผู้ใช้ที่เข้าสู่ระบบอยู่ในปัจจุบันเป็นสมาชิก
ฉันกำลังทำงานกับ hook_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 = ผู้ใช้::โหลด($current_user_id);
// รับโรงเรียนของผู้ใช้ปัจจุบัน
$currentSchool = $currentUser->field_select_a_school->getValue();
// จัดการเพิ่มแบบฟอร์มนักเรียน
ถ้า ($form_id == 'user_add_student_form') {
// งานนี้.
$form['account']['roles']['#access'] = FALSE;
$form['account']['roles']['#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;
การถ่ายโอนข้อมูล ($currentSchool);
Symfony VarDumper การถ่ายโอนข้อมูล ()
ของ $currentSchool
ดูเหมือนว่าจะมีโครงสร้างข้อมูลที่ถูกต้อง:
^ อาร์เรย์:1 [â¼
0 => อาร์เรย์:1 [â¼
"target_id" => "916"
]
]
ที่นี่สำหรับการอ้างอิงเป็นสิ่งที่สอดคล้องกัน การถ่ายโอนข้อมูล ()
สำหรับช่องเป้าหมายใน $รูปแบบ
:
"field_select_a_school" => อาร์เรย์:8 [â¼
"#type" => "คอนเทนเนอร์"
"#parents" => อาร์เรย์:1 [â¶]
"#attributes" => อาร์เรย์:1 [â¶]
"widget" => อาร์เรย์:22 [â¼
"#title" => "เลือกโรงเรียน*"
"#คำอธิบาย" => ""
"#field_parents" => []
"#required" => จริง
"#เดลต้า" => 0
"#น้ำหนัก" => 0
"#element_validate" => อาร์เรย์:1 [â¶]
"#key_column" => "target_id"
"#ประเภท" => "เลือก"
"#options" => อาร์เรย์:47 [â¶]
"#default_value" => []
"#หลายรายการ" => เท็จ
"#shs" => อาร์เรย์:7 [â¶]
"#attributes" => อาร์เรย์:1 [â¶]
"#attached" => อาร์เรย์:1 [â¶]
"#entity_type" => "ผู้ใช้"
"#bundle" => "ผู้ใช้"
"#after_build" => อาร์เรย์:1 [â¶]
"#field_name" => "field_select_a_school"
"#parents" => อาร์เรย์:1 [â¶]
"#tree" => จริง
"#form_id" => "user_add_student_form"
]
"#เข้าถึง" => จริง
"#น้ำหนัก" => 22
"#แคช" => อาร์เรย์:3 [â¶]
"#form_id" => "user_add_student_form"
]
ไม่ว่าฉันจะพยายาม $form['field_select_a_school']['widget']['#default_value']
จบลงด้วยการมีอาร์เรย์ว่างเสมอ ¯\_(ã)_/¯
ฉันพลาดอะไรไปที่นี่?