Ожидается, что форма, подобная следующей, будет отображать дополнительные поля, когда пользователь выберет «Да» в переключателе «Показать больше». Когда показано, в разделе «Дополнительно» есть текстовое поле «Имя» и набор радио «Пол».
Но это никогда не работает так, как ожидалось. Метка «Пол» будет там, но переключатели никогда не отображаются. Я знаю, что изменение «Пол» на радио будет работать, но по какой-то причине мне нужно использовать несколько переключателей. Есть ли способ заставить это работать?
<?php
пространство имен Drupal\mymodule\Form;
используйте Drupal\Core\Form\FormBase;
класс DonationPrepareForm расширяет FormBase {
/**
* {@inheritdoc}
*/
публичная функция getFormId() {
вернуть 'my_form';
}
/**
* {@inheritdoc}
*/
публичная функция buildForm(
массив $ форма,
FormStateИнтерфейс $form_state
) {
$form['show_more'] = [
'#type' => 'радио',
'#title' => 'Показать больше',
'#варианты' => [
'Д' => 'Да',
'Н' => 'Нет',
],
'#ajax' => [
'обратный вызов' => '::ajaxBuildForm',
'обертка' => 'редактировать больше обертки',
'прогресс' => [
'тип' => 'пульсирующий',
'сообщение' => $this->t('Загрузка...'),
],
],
];
$ форма ['больше'] = [
'#type' => 'контейнер',
'#prefix' => '<div id="edit-more-wrapper">',
'#суффикс' => '</div>',
];
вернуть $ форму;
}
публичная функция ajaxBuildForm (массив и форма $, FormStateInterface $ form_state)
{
если ($form_state->getValue('show_more') === 'Y') {
$form['больше']['имя'] = [
'#тип' => 'текстовое поле',
'#title' => 'Имя',
'#required' => ИСТИНА,
];
$form['больше']['пол'] = [
'#type' => 'радио',
'#title' => 'Пол',
'#варианты' => [
'М' => 'Мужской',
'Ж' => 'Женщина',
],
'#required' => ИСТИНА,
];
}
возврат $form['больше'];
}
}
Тот же вопрос распространяется и на другие составные элементы формы (например,Флажки). Есть ли способ заставить AJAX работать на них?