Я использую форму AJAX. Эту форму я строю из подкласса ContentEntityForm
. Объект, редактируемый этой формой, имеет поле Мое поле. Чтобы привести все значения полей в соответствующую структуру, которую я использую массажФормаЗначения()
в MyFieldWidget
класс (подкласс виджетбаза
).
Маленькая проблема: метод массажФормаЗначения()
вызывается дважды при каждой отправке. Других проблем с формой нет. Я могу правильно редактировать значения в этой форме.
Так что это просто вопрос понимания: почему Drupal вызывает массажФормаЗначения()
дважды при каждой отправке.
Упомянутый и мой (очень упрощенный) код:
Мой ajax-контроллер
класс AjaxController расширяет ControllerBase {
...
...
публичная функция myController($eid) {
$myEntity = $this->entityTypeManager()->getStorage('my_entity')->load($eid);
$form = $this->entityFormBuilder()->getForm($myEntity, 'my_mode');
$renderer = \Drupal::service('renderer');
$output = $renderer->renderRoot($form);
$response = новый AjaxResponse();
$response->addCommand(новый OpenModalDialogCommand($title, $output));
вернуть $ответ;
}
...
...
}
Моя Форма
является подклассом ContentEntityForm и форма режима для Режим мой_режим
организации моя_сущность
:
класс MyForm расширяет ContentEntityForm {
...
...
действия защищенной функции (массив $form, FormStateInterface $form_state) {
$actions = parent::actions($form, $form_state);
$ действия ['отправить'] = [
'#type' => 'отправить',
'#значение' => т('Сохранить'),
'#ajax' => [
'обратный вызов' => '::ajaxCallback',
'событие' => 'нажатие мыши',
],
];
вернуть действия $;
}
...
...
}
Мой класс виджета поля:
class MyFieldWidget расширяет WidgetBase, реализует ContainerFactoryPluginInterface {
...
...
общедоступная функция massageFormValues (массив $ значений, массив $ форма, FormStateInterface $ form_state) {
// ЭТОТ КОД ВЫЗЫВАЕТСЯ ДВАЖДЫ ПРИ КАЖДОЙ ОТПРАВКЕ МОЕЙ КНОПКИ ОТПРАВИТЬ, ОПРЕДЕЛЕННОЙ ВЫШЕ
// НО ПОЧЕМУ ДВАЖДЫ?
возврат $rightStructureValues;
}
...
...
}