Я сделал виджет, который «генерирует» поля на основе выбранного параметра поля выбора.
Я сделал большую часть логики:
1- В этом поле выбирается вариант:
$элемент['значение'] = [
'#тип' => 'выбрать',
'#options' => $this->getBreakpointsGroups(),
'#default_value' => $значение,
'#ajax' => [
'callback' => [$this,'updateBreakpoint'], // не забывайте :: при вызове метода класса.
'событие' => 'изменить',
'wrapper' => $wrapper_id, // Этот элемент обновляется с помощью этого обратного вызова AJAX.
'метод' => 'html',
]
];
2-Затем выполняется функция updateBreakpoint, и она переходит к обновлению формы. Сначала я извлекаю значение оболочки на случай, если есть несколько форм виджета, чтобы он не предназначался для другого экземпляра той же формы.
$state = $form_state->getTriggeringElement();
$wrapper_id = $state['#ajax']['wrapper'];
3- После внесения некоторых изменений в форму я возвращаю изменения и использую команду AJAX.
$ajax_response = новый AjaxResponse();
$ajax_response->addCommand(new HtmlCommand("div#{$wrapper_id}", $form['image_fieldset']));
вернуть $ajax_response;
Обертка определяется внутри функции formElement следующим образом:
$wrapper_id = Html::getUniqueId('обертка');
Проблема в том, что никаких изменений не происходит. Когда я определяю $wrapper_id как строку без каких-либо уникальных функций идентификатора (например, «обертка»), вносятся изменения.Я в замешательстве, почему. Я убедился, что значение оболочки сохраняется во всей форме.