ฉันพยายามสร้างแบบฟอร์มที่มีปุ่มส่งสองปุ่ม และแต่ละปุ่มจะใช้ฟังก์ชันที่แตกต่างกัน: ค่าเริ่มต้น ส่งแบบฟอร์ม
ฟังก์ชั่นและกำหนดเอง ส่งแบบฟอร์มสิ้นสุดเซสชัน
การทำงาน. ดังนั้นฉันมีรหัสนี้:
คลาส EndSessionForm ขยาย FormBase {
/**
* @var \Drupal
*/
$drupal ส่วนตัว;
ฟังก์ชั่นสาธารณะ __construct () {
$this->drupal = ใหม่ Drupal();
}
/**
* {@inheritdoc}
*/
ฟังก์ชั่นสาธารณะ getFormId (): สตริง {
กลับ 'end_session_form';
}
ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state): อาร์เรย์ {
// ... บางสนาม
$แบบฟอร์ม['ส่ง'] = [
'#type' => 'ส่ง',
'#value' => 'ปิดเซสชั่น',
'#name' => 'btnEnd',
];
$แบบฟอร์ม['หยุด'] = [
'#type' => 'ส่ง',
'#value' => 'หยุดเซสชัน',
'#name' => 'btnStop',
];
คืนฟอร์ม $;
}
ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
// ฟังก์ชันเรียกด้วยปุ่ม btnEnd
}
ฟังก์ชันสาธารณะ submitStopForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
// ฟังก์ชั่นการโทรด้วยปุ่ม btnStop
}
}
ให้เป็นไปตาม เอกสาร ของ Drupal 9.2.x สิ่งเดียวที่ฉันต้องทำคือเพิ่มไฟล์ #ส่ง
พารามิเตอร์ไปที่ $แบบฟอร์ม['หยุด']
องค์ประกอบเช่นนี้:
$แบบฟอร์ม['หยุด'] = [
'#type' => 'ส่ง',
'#value' => 'หยุดเซสชัน',
'#name' => 'btnStop',
'#submit' => [ $this, 'submitStopForm' ] // ลิงก์ไปยังฟังก์ชันส่งที่สอง
]
แต่มันไม่ทำงาน
หลังจากพยายามและค้นคว้าหลายครั้ง ฉันพบวิธีแก้ปัญหาบางส่วนโดยเพิ่มสิ่งนี้เข้าไป สร้างแบบฟอร์ม
:
$form['#submit'][] = [$this, 'submitStopForm'];
ขณะนี้ปุ่มทั้งสองเชื่อมโยงกับ ส่งแบบฟอร์ม
และ ส่งStopForm
ไม่ว่าฉันจะใส่ #ส่ง
พารามิเตอร์บนปุ่มหรือไม่ ส่งStopForm
จะถูกดำเนินการก่อนจากนั้น ส่งแบบฟอร์ม
. แต่ฉันสงสัยว่าฉันจะเชื่อมโยงปุ่มแรกได้อย่างไร ส่งแบบฟอร์ม
และอันที่สองถึง ส่งStopForm
ถูกต้องและไม่เข้าในฟังก์ชันทั้งสอง เมื่อคลิกปุ่มเดียว
ขอบคุณและมีวันที่ดี!