ฉันใช้ Drupal 9 ฉันกำลังสร้างโมดูลที่มีแบบฟอร์มพร้อมปุ่มที่จะสร้างแบบฟอร์มใหม่ที่คล้ายกับอันแรกขึ้นมาใหม่
นี่คือรหัสของฉัน
ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
$database = \Drupal::database();
$result = $database->select('user_details', 'u')
->ฟิลด์ ('u', ['uid']);
$row = $result->execute()->fetchAll();
$rowCount = นับ ($ แถว);
$แบบฟอร์ม['buttons_multiple'] = [
'#type' => "คอนเทนเนอร์",
'#attributes' => ['style' => 'margin-top: 2em;'],
'add_chat' => [
'#type' => 'ส่ง',
'#value' => $this->t('เพิ่มแบบฟอร์ม +'),
'#attributes' => [
'style' => 'ขนาดตัวอักษร: 1.2em;',
]
'#submit' => ['::addForm'],
]
];
สำหรับ ($counter = 1; $counter <= $rowCount; $counter++) {
$form['form_box_' . $เคาน์เตอร์] = [
'#type' => "คอนเทนเนอร์",
'full_name'.$เคาน์เตอร์ => [
'#type' => 'ช่องข้อความ',
'#title' => 'ชื่อ',
'#ขนาด' => 12,
'#required' => จริง,
]
'buttons_single' => [
'#type' => "คอนเทนเนอร์",
'บันทึก'.$เคาน์เตอร์ => [
'#type' => 'ส่ง',
'#value' => $this->t('บันทึก'),
'#attributes' => [
'style' => 'ขนาดตัวอักษร: 1em;',
]
'#submit' => ['::submitForm'],
]
]
'นับ' => [
'#type' => 'ซ่อน',
'#value' => $เคาน์เตอร์
]
];
}
}
ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
$name = $form_state->getValue('ชื่อเต็ม');
$counter = $form_state->getValue('นับ');
$form_state->set('user_values', [
'ชื่อ' => $form_state->getValue('ชื่อ'),
]);
// เพื่อจุดประสงค์ในการทดสอบ แสดงชื่อเต็ม
$this->messenger()->addMessage($this->t('สวัสดี ชื่อของคุณคือ %name.', ['%name' => $name]));
}
ฟังก์ชันสาธารณะ addForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
$ค่า = [
[
'full_name' => '',
]
];
$database = \Drupal::database();
$query = $database->insert('user_details')->fields(['full_name']);
foreach (ค่า $ เป็นรายละเอียด $) {
$query->values(รายละเอียด$);
}
$query->execute();
}
ตามรหัสด้านบน ฉันได้รับเฉพาะชื่อของแบบฟอร์มที่เพิ่มล่าสุด แม้ว่าฉันจะคลิกปุ่มบันทึกของแบบฟอร์มแรกก็ตาม
ฉันจะทำงานกับปุ่มที่บันทึกไว้สำหรับแต่ละแบบฟอร์มได้อย่างไร
ขอบคุณล่วงหน้า.