Я использую следующий код для формы.
общедоступная функция buildForm (массив $ form, FormStateInterface $ form_state) {
$region_options = static::getFirstDropdownOptions();
$form['vvv_region'] = [
'#тип' => 'выбрать',
'#title' => $this->t('поле выбора региона'),
'#options' => $region_options,
'#empty_option' => t('- Выберите регион -'),
'#ajax' => [
'обратный вызов' => '::myAjaxCallback',
'отключить-перефокусировку' => ЛОЖЬ,
'событие' => 'изменить',
'обертка' => 'вывод-редактирование',
'прогресс' => [
'тип' => 'пульсирующий',
'message' => $this->t('Проверка записи...'),
],
]
];
$region_selected = $form_state->getValue('vvv_region');
$city_options = static::getSecondDropdownOptions($region_selected);
$ форма ['выход'] = [
'#тип' => 'выбрать',
'#title' => $this->t('поле выбора города'),
'#options' => $city_options,
'#prefix' => '<div id="edit-output">',
'#суффикс' => '</div>',
'#empty_option' => t('- Выберите город -'),
'#значение_по_умолчанию' => '',
'#ajax' => [
'обратный вызов' => '::cityAjaxCallback',
'отключить-перефокусировку' => ЛОЖЬ,
'событие' => 'изменить',
'обертка' => 'город редактирования',
'прогресс' => [
'тип' => 'пульсирующий',
'message' => $this->t('Проверка записи...'),
],
]
];
$city_select = $form_state->getValue('output');
$suburb_options = static::getSuburbDropdownOptions($city_select);
$ форма ['sur'] = [
'#тип' => 'выбрать',
'#options' => $suburb_options,
'#prefix' => '<div id="edit-city">',
'#суффикс' => '</div>',
'#empty_option' => t('- Выберите сурб -'),
'#default_value' => массив(''),
];
вернуть $ форму;
}
публичная функция myAjaxCallback (массив и $ форма, FormStateInterface $ form_state) {
$region_selected = $form_state->getValue('vvv_region');
$city_options = static::getSecondDropdownOptions($region_selected);
если ($form_state->getErrors()) {
\Drupal::messenger()->addError($region_selected);
$form_state->setRebuild();
}
$form['outpout']['#options'] = $city_options;
возврат $ форма ['выход'];
}
публичная функция cityAjaxCallback (массив и $ форма, FormStateInterface $ form_state) {
$city_select = $form_state->getValue('output');
$sur_data = static::getSuburbDropdownOptions($city_select);
если ($form_state->getErrors()) {
\Drupal::messenger()->addError($city_select);
$form_state->setRebuild();
}
$form['sur']['#options'] = $sur_data;
возврат $form['sur'];
}
При отправке формы я получаю следующую ошибку.
Обнаружен недопустимый выбор. Пожалуйста свяжитесь с администратором сайта.
Что не так с кодом, который я использую?