Я использую Form API для создания формы, в которой у меня есть несколько экземпляров набора полей. Каждый набор полей содержит одни и те же поля, одно для хранения адреса электронной почты, а другое для другого бита информации. Но по сути они оба текстовые поля, которые используют автозаполнение, которое отлично работает. Но у меня возникла проблема в обработчике отправки, описанном ниже в моем коде.
$form['authors_container']['authors_fieldset'][$i] = [
'#тип' => 'набор полей',
'#атрибуты' => [
'класс' => ['автор-полесет']
],
'электронная почта' => [
'#тип' => 'текстовое поле',
'#title' => 'Электронная почта автора',
'#значение' => $emailValue,
'#autocomplete_route_name' => 'discussion_papers.contact_email_lookup',
'#атрибуты' => [
'класс' => ['автор-электронная почта']
]
],
'принадлежность' => [
'#тип' => 'текстовое поле',
'#title' => 'Принадлежность',
'#value' => $affiliationValue,
'#атрибуты' => [
'класс' => ['принадлежность автора']
]
]
];
Затем у меня есть кнопка AJAX для добавления дополнительных экземпляров вышеуказанного набора полей с соответствующим обработчиком:
$form['authors_container']['add_author'] = [
'#type' => 'отправить',
'#value' => 'Добавить другого автора',
'#submit' => ['::AddAuthor'],
'#limit_validation_errors' => [],
'#ajax' => [
'обратный вызов' => '::getAuthorsFields',
'wrapper' => 'контейнер авторов',
'метод' => 'заменить',
'отключить-перефокусировку' => правда,
]
];
общедоступная функция addAuthor($form, FormStateInterface &$form_state) {
$storage = $form_state->getStorage();
если (пусто ($ хранилище ['numOfAuthors']))
$storage['numOfAuthors'] = 1;
$storage['numOfAuthors']++;
$form_state->setStorage($storage);
$form_state->setLimitValidationErrors([]);
$form_state->setRebuild();
}
Все это прекрасно работает, я могу добавить столько экземпляров набора полей, сколько мне нужно.Моя проблема в том, что когда я отправляю форму, значения только самого последнего набора полей всегда пусты в $form_state['значения']
массив, но я вижу значения в $form_state['ввод']
множество. Я понимаю, что входной массив является необработанным, непроверенным вводом и что массив значений проверен, поэтому мой вопрос: почему только последний набор текстовых полей не проверен? Мой обработчик проверки не удаляет никаких значений.