Я использую безголовый Drupal с промежуточным программным обеспечением .NET. У меня есть форма Drupal 9.Эта форма содержит два раскрывающихся элемента, которые заполняются в зависимости от значения, выбранного в третьем раскрывающемся списке. У меня есть собственный обработчик проверки сразу после этих раскрывающихся элементов AJAX, где я храню некоторые данные в базе данных .NET.
Это мой код для крючок_form_alter()
.
$form['тип_технологии'] = [
'#тип' => 'выбрать',
'#title' => t('Тип технологии'),
'#options' => $tech_type_options,
'#default_value' => $t_selected_option,
'#ajax' => [
'обратный вызов' => 'techlistDropdownCallback',
'wrapper' => 'techlist-fieldset-container',
'событие' => 'изменить',
],
];
если ($t_selected_option != '') {
$tech_options = массив (0 => '- Нет -');
$tech_options = custom_authorization_tech_options($t_selected_option);
}
еще {
$tech_options = массив (0 => '- Нет -');
}
$form['techlist-select-fieldset-container']= [
'#type' => 'контейнер',
'#attributes' => ['id' => 'techlist-fieldset-container'],
];
$form['techlist-select-fieldset-container']['source_tech'] = [
'#тип' => 'выбрать',
'#title' => t('Исходная технология'),
'#options' => $tech_options,
'#default_value' => !пусто($source_tech_value) ? $source_tech_value : $form_state->getValue('source_tech'),
'#множественный' => правда,
];
$form['techlist-select-fieldset-container']['target_tech'] = [
'#тип' => 'выбрать',
'#title' => t('Целевая технология'),
'#options' => $tech_options,
'#default_value' => !пусто($target_tech_value) ? $target_tech_value : $form_state->getValue('target_tech'),
'#множественный' => правда,
];
если ($t_selected_option == 0) {
$form['techlist-select-fieldset-container']['source_tech']['#title'] = t('Исходная технология (сначала необходимо выбрать тип технологии)');
$form['techlist-select-fieldset-container']['source_tech']['#disabled'] = TRUE;
$form['techlist-select-fieldset-container']['target_tech']['#title'] = t('Целевая технология (сначала необходимо выбрать тип технологии)');
$form['techlist-select-fieldset-container']['target_tech']['#disabled'] = TRUE;
}
array_unshift($form['#validate'],'custom_authorization_mak_form_validate');
Всякий раз, когда эти зависимые раскрывающиеся списки заполняются значениями, функция проверки каким-то образом вызывается, и неполные данные автоматически сохраняются в базе данных, даже без нажатия кнопки сохранения в форме.
Как избежать этой странной проблемы?
Я просто хочу заполнить раскрывающиеся элементы с помощью AJAX, а затем вызвать обработчик проверки для сохранения данных в базе данных.