Tôi đang sử dụng Drupal không đầu với phần mềm trung gian .NET. Tôi có một mẫu Drupal 9.Biểu mẫu này chứa hai phần tử thả xuống được điền tùy thuộc vào giá trị được chọn trong trình đơn thả xuống thứ ba. Tôi có trình xử lý xác thực tùy chỉnh ngay sau các phần tử thả xuống AJAX đó, nơi tôi lưu trữ một số dữ liệu trong cơ sở dữ liệu .NET.
Đây là mã của tôi cho hook_form_alter()
.
$form['technology_type'] = [
'#type' => 'chọn',
'#title' => t('Loại công nghệ'),
'#options' => $tech_type_options,
'#default_value' => $t_selected_option,
'#ajax' => [
'callback' => 'techlistDropdownCallback',
'trình bao bọc' => 'techlist-fieldset-container',
'sự kiện' => 'thay đổi',
],
];
nếu ($t_sselected_option != '') {
$tech_options = mảng(0 => '- Không -');
$tech_options = custom_authorization_tech_options($t_selected_option);
}
khác {
$tech_options = mảng(0 => '- Không -');
}
$form['techlist-select-fieldset-container']= [
'#type' => 'thùng chứa',
'#attribut' => ['id' => 'techlist-fieldset-container'],
];
$form['techlist-select-fieldset-container']['source_tech'] = [
'#type' => 'chọn',
'#title' => t('Công nghệ nguồn'),
'#options' => $tech_options,
'#default_value' => !empty($source_tech_value) ? $source_tech_value : $form_state->getValue('source_tech'),
'#multiple' => đúng,
];
$form['techlist-select-fieldset-container']['target_tech'] = [
'#type' => 'chọn',
'#title' => t('Công nghệ mục tiêu'),
'#options' => $tech_options,
'#default_value' => !empty($target_tech_value) ? $target_tech_value : $form_state->getValue('target_tech'),
'#multiple' => đúng,
];
nếu ($t_sselected_option == 0) {
$form['techlist-select-fieldset-container']['source_tech']['#title'] = t('Nguồn Tech (Bạn phải chọn loại tech trước)');
$form['techlist-select-fieldset-container']['source_tech']['#disabled'] = TRUE;
$form['techlist-select-fieldset-container']['target_tech']['#title'] = t('Target Tech (Bạn phải chọn loại tech trước)');
$form['techlist-select-fieldset-container']['target_tech']['#disabled'] = TRUE;
}
array_unshift($form['#validate'],'custom_authorization_mak_form_validate');
Bất cứ khi nào các menu thả xuống phụ thuộc này chứa đầy các giá trị, chức năng xác thực sẽ được gọi bằng cách nào đó và dữ liệu không đầy đủ sẽ tự động được lưu trữ trong cơ sở dữ liệu ngay cả khi không nhấn nút lưu của biểu mẫu.
Làm cách nào để tránh vấn đề kỳ lạ này?
Tôi chỉ muốn điền vào các phần tử thả xuống bằng AJAX, sau đó gọi trình xử lý xác thực để lưu trữ dữ liệu trong cơ sở dữ liệu.