Am un formular pe o pagină care actualizează un singur câmp al unui Nod. Formularul folosește ajax pentru a actualiza câmpul și returnează entitatea nou salvată și înlocuiește HTML-ul curent, astfel încât noul câmp să fie afișat corect.
Acest lucru funcționează bine prima dată când formularul este declanșat, dar se întrerupe după aceea cu următoarea eroare în consola mea:
A apărut o eroare HTTP AJAX
Nu există niciun alt raport de eroare care să-mi spună mai multe despre această eroare.
Iată codul meu formular:
<?php
spațiu de nume Drupal\ats_tweaks\Form;
utilizați Drupal\Core\Form\FormBase;
utilizați Drupal\Core\Form\FormStateInterface;
utilizați Drupal\node\Entity\Node;
utilizați Drupal\Core\Ajax\AjaxResponse;
utilizați Drupal\Core\Ajax\ReplaceCommand;
utilizați Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Formular de înscriere.
*/
clasa UpdateApplicationStatusForm extinde FormBase {
/**
* ID formular.
*
* @var șir
*/
$formId static protejat;
/**
* {@inheritdoc}
*/
funcția publică getFormId() {
$formId = 'update_application_status_form';
if (self::$formId) {
$formId = $formId . '_' . self::$formId;
}
returnează $formId;
}
/**
* {@inheritdoc}
*/
funcția publică statică create(ContainerInterface $container) {
// Instanțiază această clasă de formulare.
$instanta = parent::create($container);
returnare $instanță;
}
/**
* {@inheritdoc}
*/
funcția publică buildForm(array $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();
// Lista de selectare a aplicației.
$form['status'] = [
'#type' => 'selectați',
'#title' => $this->t('Sollicitatiestatus'),
'#options' => $status_options,
'#default_value' => $application->get('field_application_status')->getValue()[0]['value'],
'#ajax' => [
'callback' => [$this, 'submitForm'],
'wrapper' => 'mapping',
'efect' => 'fade',
],
];
$form['nid'] = [
'#type' => 'ascuns',
'#default_value' => $node_id,
'#value' => $node_id,
];
returnează $form;
}
/**
* {@inheritdoc}
*/
funcția publică submitForm(matrice &$form, FormStateInterface $form_state) {
$node_id = $form_state->getValues()['nid'];
$application = Node::load($node_id);
$application->set('field_application_status', $form_state->getValues()['starea']);
$aplicație->salvare();
$view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
$storage = \Drupal::entityTypeManager()->getStorage('node');
$nod = $storage->load($node_id);
$build = $view_builder->view($node, 'teaser');
$form_state->setRebuild(TRUE);
$răspuns = AjaxResponse nou();
$response->addCommand(new ReplaceCommand('#application-' . $node_id, $build));
returnează $răspuns;
}
}