Tôi cố gắng tạo một biểu mẫu có hai nút gửi và mỗi nút sẽ sử dụng một chức năng khác nhau: mặc định gửi biểu mẫu
chức năng và tùy chỉnh gửiFormEndSession
chức năng. Vì vậy, tôi có mã này:
lớp EndSessionForm mở rộng FormBase {
/**
* @var \Drupal
*/
$ drupal riêng tư;
hàm công khai __construct() {
$this->drupal = new Drupal();
}
/**
* {@inheritdoc}
*/
hàm công khai getFormId (): chuỗi {
trả về 'end_session_form';
}
chức năng công khai buildForm (mảng $form, FormStateInterface $form_state): mảng {
// ... một số trường
$form['submit'] = [
'#type' => 'gửi',
'#value' => 'Đóng phiên',
'#name' => 'btnEnd',
];
$form['stop'] = [
'#type' => 'gửi',
'#value' => 'Dừng phiên',
'#name' => 'btnStop',
];
trả về biểu mẫu $;
}
hàm công khai submitForm(mảng &$form, FormStateInterface $form_state) {
// Hàm gọi với nút btnEnd
}
hàm công khai submitStopForm(mảng &$form, FormStateInterface $form_state) {
// Hàm gọi với nút btnStop
}
}
Theo tài liệu của Drupal 9.2.x, điều duy nhất tôi phải làm là thêm một #Gửi đi
tham số cho $form['stop']
phần tử như thế này:
$form['stop'] = [
'#type' => 'gửi',
'#value' => 'Dừng phiên',
'#name' => 'btnStop',
'#submit' => [ $this, 'submitStopForm' ] // liên kết tới hàm gửi thứ hai
]
Nhưng nó không hoạt động.
Sau nhiều lần thử và nghiên cứu, tôi đã tìm ra giải pháp một phần bằng cách thêm phần này vào xây dựngForm
:
$form['#submit'][] = [$this, 'submitStopForm'];
Hai nút hiện được liên kết với gửi biểu mẫu
và gửiStopForm
, không có vấn đề nếu tôi đặt một #Gửi đi
tham số trên các nút hay không, gửiStopForm
được thực hiện đầu tiên sau đó gửi biểu mẫu
. Nhưng tôi tự hỏi làm cách nào tôi có thể liên kết nút đầu tiên với gửi biểu mẫu
và cái thứ hai gửiStopForm
đúng và không cần nhập trong cả hai chức năng khi chúng ta nhấp vào một nút.
Cảm ơn và có một ngày tốt đẹp!