Рейтинг:0

Как определить, где отображать form_state->setError при использовании нескольких обратных вызовов ajax?

флаг cn

Я работаю над некоторыми пользовательскими функциями внутри представления таблицы представлений, которое позволяет использовать форму «быстрого редактирования» в качестве доступного поля через плагин поля представлений.

Форма отображается для каждой строки отдельно с использованием уникального идентификатора sub_id, передаваемого конструктору форм для каждой строки.

У меня работает форма, и она правильно выполняет отправку, но проблема в том, что мне нужно сделать две вещи при обратном вызове ajax, поэтому я использую систему AjaxResponse() для выполнения двух разных действий.

Первое действие — обновление «значения» определенного столбца в строке представлений. Второй, по сути, просто возвращает $form; вернуть форму.

Проблема в том, что когда форма выполняет проверку, проверка работает, за исключением того, что сообщения не отображаются, пока я не обновлю страницу. Я не могу понять, как указать, какую оболочку использовать для отображения сообщения формы, так как я передаю два разных ответа ajax, так как мне нужно сделать два изменения.

Код, который я использую внутри своего обратного вызова ajax, таков:

публичная функция quickEditAjax(&$form, FormStateInterface $form_state) {
    $values ​​= $form_state->getValues();

    $response = новый AjaxResponse();

    $status = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($values['status']);
    $response->addCommand(new ReplaceCommand('.request-status-'. $values['id'],$status->getName()));
    $response->addCommand(new ReplaceCommand('#quick-edit-wrapper-'. $this->sub_id,$form));

    вернуть $ответ;
  }

Где #quick-edit-wrapper-$this->sub_id уникальный #id, установленный в форме, и .request-status-$values['id'] это класс, прикрепленный к столбцу табличного представления, который я пытаюсь изменить.

И форма, и столбец таблицы имеют правильный идентификатор и класс, и столбец успешно обновляется с помощью обратного вызова ajax addCommand().

Сообщения об ошибках проверки не отображаются ни в одной из оболочек, но я хотел бы, чтобы они отображались в # быстрое редактирование-обертка обертка. Если ошибок проверки нет и отправка проходит, я также передаю сообщение об успешном завершении, и это сообщение также не отображается, пока я не обновлю страницу.

Есть ли способ, которым я могу конкретно указать сообщениям, в какой оболочке отображать? Ответ ajax, кажется, путается с тем, какой из них использовать.

Рейтинг:1
флаг cn

Добавьте в форму блок статусных сообщений:

если ($form_state->hasAnyErrors()) {
  $form['status_messages'] = [
    '#type' => 'status_messages',
    '#вес' => -1000,
  ];
  $form['#sorted'] = ЛОЖЬ;
}
$response->addCommand(new ReplaceCommand('#quick-edit-wrapper-' . $this->sub_id, $form));
Ex0r avatar
флаг cn
Работал отлично! Спасибо.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.