Tôi đang sử dụng API biểu mẫu để tạo biểu mẫu trong đó tôi có nhiều phiên bản của bộ trường. Mỗi bộ trường chứa các trường giống nhau, một trường để lưu trữ địa chỉ email và một trường khác để lưu trữ một chút thông tin khác. Nhưng về cơ bản, cả hai trường văn bản đều sử dụng tính năng tự động hoàn thành, hoạt động tốt. Nhưng tôi đang gặp sự cố trong trình xử lý gửi, được mô tả bên dưới mã của tôi bên dưới.
$form['authors_container']['authors_fieldset'][$i] = [
'#type' => 'bộ trường',
'#thuộc tính' => [
'lớp' => ['bộ trường tác giả']
],
'thư điện tử' => [
'#type' => 'trường văn bản',
'#title' => 'Email tác giả',
'#value' => $emailValue,
'#autocomplete_route_name' => 'discussion_papers.contact_email_lookup',
'#thuộc tính' => [
'lớp' => ['email tác giả']
]
],
'liên kết' => [
'#type' => 'trường văn bản',
'#title' => 'Chi nhánh',
'#value' => $affiliationValue,
'#thuộc tính' => [
'lớp' => ['liên kết tác giả']
]
]
];
Sau đó, tôi có một nút AJAX để thêm nhiều phiên bản khác của bộ trường trên với trình xử lý tương ứng của nó:
$form['authors_container']['add_author'] = [
'#type' => 'gửi',
'#value' => 'Thêm tác giả khác',
'#submit' => ['::AddAuthor'],
'#limit_validation_errors' => [],
'#ajax' => [
'gọi lại' => '::getAuthorsFields',
'trình bao bọc' => 'bộ chứa tác giả',
'phương pháp' => 'thay thế',
'vô hiệu hóa lấy nét lại' => đúng,
]
];
chức năng công cộng addAuthor($form, FormStateInterface &$form_state) {
$storage = $form_state->getStorage();
nếu (trống($storage['numOfAuthors']))
$storage['numOfAuthors'] = 1;
$storage['numOfAuthors']++;
$form_state->setStorage($storage);
$form_state->setLimitValidationErrors([]);
$form_state->setRebuild();
}
Tất cả điều này hoạt động tốt, tôi có thể thêm bao nhiêu phiên bản của bộ trường nếu tôi cần.Vấn đề của tôi là khi tôi gửi biểu mẫu, các giá trị của chỉ bộ trường cuối cùng luôn trống trong $form_state['values']
mảng, nhưng tôi có thể thấy các giá trị trong $form_state['đầu vào']
mảng. Tôi hiểu rằng mảng đầu vào là đầu vào thô, chưa được xác thực và mảng giá trị đã được xác thực, vì vậy câu hỏi của tôi là tại sao chỉ tập hợp trường văn bản cuối cùng không được xác thực? Trình xử lý xác thực của tôi không xóa bất kỳ giá trị nào.