Tôi có một biểu mẫu trên trang cập nhật một trường duy nhất của ứng dụng Node. Biểu mẫu sử dụng ajax để cập nhật trường và trả về thực thể mới được lưu, đồng thời thay thế HTML hiện tại để trường mới hiển thị chính xác.
Điều này hoạt động tốt trong lần đầu tiên biểu mẫu được kích hoạt, nhưng sau đó bị hỏng với lỗi sau trong bảng điều khiển của tôi:
Đã xảy ra lỗi AJAX HTTP
Không có thêm báo cáo lỗi nào có thể cho tôi biết thêm về lỗi này.
Đây là mã mẫu của tôi:
<?php
không gian tên Drupal\ats_tweaks\Form;
sử dụng Drupal\Core\Form\FormBase;
sử dụng Drupal\Core\Form\FormStateInterface;
sử dụng Drupal\node\Entity\Node;
sử dụng Drupal\Core\Ajax\AjaxResponse;
sử dụng Drupal\Core\Ajax\ReplaceCommand;
sử dụng Symfony\Thành phần\DependencyInjection\ContainerInterface;
/**
* Hình thức giới thiệu.
*/
lớp UpdateApplicationStatusForm mở rộng FormBase {
/**
* Biểu mẫu ID.
*
* chuỗi @var
*/
$formId tĩnh được bảo vệ;
/**
* {@inheritdoc}
*/
hàm công khai getFormId() {
$formId = 'update_application_status_form';
nếu (bản thân::$formId) {
$formId = $formId . '_' . bản thân::$formId;
}
trả về $formId;
}
/**
* {@inheritdoc}
*/
tạo hàm tĩnh công khai (ContainerInterface $container) {
// Khởi tạo lớp biểu mẫu này.
$instance = parent::create($container);
trả lại cá thể $;
}
/**
* {@inheritdoc}
*/
chức năng công khai buildForm(mảng $form, FormStateInterface $form_state) {
$node_id = $form_state->getBuildInfo()['args'][0];
self::$formId = $node_id;
$application = Node::load($node_id);
$field_definitions = \Drupal::service('entity_field.manager')->getFieldDefinitions('node', 'application');
if (isset($field_definitions['field_application_status'])) {
$status_options = options_allowed_values($field_definitions['field_application_status']->getFieldStorageDefinition());
}
$form['#attributes']['id'] = $this->getFormId();
// Danh sách chọn ứng dụng.
$form['status'] = [
'#type' => 'chọn',
'#title' => $this->t('Sollicitatatiestatus'),
'#options' => $status_options,
'#default_value' => $application->get('field_application_status')->getValue()[0]['value'],
'#ajax' => [
'callback' => [$this, 'submitForm'],
'trình bao bọc' => 'ánh xạ',
'hiệu ứng' => 'mờ dần',
],
];
$form['nid'] = [
'#type' => 'ẩn',
'#default_value' => $node_id,
'#value' => $node_id,
];
trả về biểu mẫu $;
}
/**
* {@inheritdoc}
*/
hàm công khai submitForm(mảng &$form, FormStateInterface $form_state) {
$node_id = $form_state->getValues()['nid'];
$application = Node::load($node_id);
$application->set('field_application_status', $form_state->getValues()['status']);
$application->save();
$view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
$storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $storage->load($node_id);
$build = $view_builder->view($node, 'teaser');
$form_state->setRebuild(TRUE);
$response = new AjaxResponse();
$response->addCommand(new ReplaceCommand('#application-' . $node_id, $build));
trả lại phản hồi $;
}
}