Nhiệm vụ của tôi là ajaxify biểu mẫu cờ phức tạp (với các trường bổ sung).
Tôi cần điều này vì cờ ajax mặc định không hỗ trợ các trường dữ liệu.
Tôi cần có biểu mẫu gắn cờ để tạo cờ và sau đó cập nhật biểu mẫu đó khi việc gắn cờ đã được tạo.
Tôi muốn đặt biểu mẫu ajaxified gắn cờ tùy chỉnh trong mẫu của mình
Đầu tiên tôi xây dựng biểu mẫu:
$term = $variables['term'];
$flag = \Drupal::service('flag')->getFlagById('subscribe_term');
$flagging_entity = \Drupal::service('flag')->getFlagging($flag, $variables['term']);
nếu (!$flagging_entity) {
$flagging_entity = \Drupal::entityTypeManager()->getStorage('flagging')->create([
'uid' => \Drupal::currentUser()->id(),
'session_id' => NULL,
'flag_id' => $flag->id(),
'entity_id' => $term->id(),
'entity_type' => $term->getEntityTypeId(),
'toàn cầu' => $flag->isGlobal(),
]);
}
$form = \Drupal::entityTypeManager()
->getFormObject('gắn cờ', 'chỉnh sửa')
->setEntity($flagging_entity);
$variables['flag'] = \Drupal::formBuilder()->getForm($form);
Hình thức hoạt động ok.
Sau đó, tôi thay đổi biểu mẫu quảng cáo thêm gọi lại ajax:
$form['actions']['submit']['#ajax'] = [
'gọi lại' => 'mymodule_flag_form_ajax_callback',
'hiệu ứng' => 'mờ dần',
];
Và sau đó trong cuộc gọi lại ajax tôi cố gắng để có được hình thức tương tự:
$render_selector = ".flag-form-wrapper";
$response = new AjaxResponse();
$form_object = $form_state->getFormObject();
$flagging_entity = $form_object->getEntity();
$flagged_entity_field = $flagging_entity->get('flagged_entity')->getValue();
nếu ($flagged_entity_field) {
$tid = $flagged_entity_field[0]['target_id'];
$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($tid);
nếu ($thuật ngữ) {
$flag = \Drupal::service('flag')->getFlagById('subscribe_term');
$flagging_entity = \Drupal::service('flag')->getFlagging($flag, $term);
nếu (!$flagging_entity) {
$flagging_entity = \Drupal::entityTypeManager()->getStorage('flagging')->create([
'uid' => \Drupal::currentUser()->id(),
'session_id' => NULL,
'flag_id' => $flag->id(),
'entity_id' => $term->id(),
'entity_type' => $term->getEntityTypeId(),
'toàn cầu' => $flag->isGlobal(),
]);
}
$form_new = \Drupal::entityTypeManager()
->getFormObject('gắn cờ', 'chỉnh sửa')
->setEntity($flagging_entity);
$form_build = \Drupal::formBuilder()->getForm($form_new);
$response->addCommand(new HtmlCommand($render_selector, $form_build));
}
}
nhưng tôi nhận được ngoại lệ sau: FormAjaxException
Vậy tôi đang làm gì sai và cách làm mới biểu mẫu bằng ajax?