Tôi đang sử dụng biểu mẫu AJAX. Biểu mẫu này tôi xây dựng từ một lớp con của Nội dungThực thểHình thức
. Thực thể được chỉnh sửa bởi biểu mẫu này có một trường Cánh đồng của tôi. Để đưa tất cả các giá trị trường vào một cấu trúc phù hợp mà tôi đang sử dụng massageFormValues()
Trong MyFieldWidget
lớp (phân lớp của Tiện ích cơ sở
).
Vấn đề nhỏ là: phương pháp massageFormValues()
được gọi hai lần trên mỗi lần gửi. Không có vấn đề nào khác với biểu mẫu. Tôi có thể chỉnh sửa chính xác các giá trị trên biểu mẫu này.
Vì vậy, đây chỉ là câu hỏi về sự hiểu biết: tại sao Drupal lại gọi massageFormValues()
hai lần trên mỗi lần gửi.
Mã được đề cập và mã (rất đơn giản) của tôi:
Bộ điều khiển ajax của tôi
lớp AjaxController mở rộng ControllerBase {
...
...
hàm công khai 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 = new AjaxResponse();
$response->addCommand(OpenModalDialogCommand mới($title, $output));
trả lại phản hồi $;
}
...
...
}
Hình thức của tôi
là một lớp con của ContentEntityForm và nó là một hình thức chế độ cho cách thức my_mode
của thực thể my_entity
:
lớp MyForm mở rộng ContentEntityForm {
...
...
hành động chức năng được bảo vệ (mảng $form, FormStateInterface $form_state) {
$actions = parent::actions($form, $form_state);
$actions['submit'] = [
'#type' => 'gửi',
'#value' => t('Lưu'),
'#ajax' => [
'gọi lại' => '::ajaxCallback',
'sự kiện' => 'mousedown',
],
];
trả lại hành động $;
}
...
...
}
Lớp tiện ích trường của tôi:
class MyFieldWidget extends WidgetBase thực hiện ContainerFactoryPluginInterface {
...
...
chức năng công khai massageFormValues(mảng $values, mảng $form, FormStateInterface $form_state) {
// MÃ NÀY ĐƯỢC GỌI HAI LẦN TRÊN MỖI LẦN GỬI CỦA NÚT GỬI CỦA TÔI ĐƯỢC ĐỊNH NGHĨA Ở TRÊN
// NHƯNG TẠI SAO LẠI HAI LẦN?
trả về $rightStructureValues;
}
...
...
}