Кнопка отправки формы с помощью ajax, замените форму другой (ошибка 500)
Я пытаюсь превратить свою форму в многоступенчатую форму ajax.
У меня есть:
class ProjektForm extends FormBase {
public function getFormId() { return 'projekt_form'; }
public function buildForm(array $form, FormStateInterface $form_state) {
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Title*:'),
'#required' => TRUE
);
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => $this->t('Add'),
'#button_type' => 'primary',
'#ajax' => [
'wrapper' => 'projekt-form-ajax-id',
'callback' => 'form_ajax_submit',
'method' => 'replace',
'effect' => 'fade'
]
);
$form['#prefix'] = '<div id="projekt-form-wrapper">';
$form['#suffix'] = '</div>';
return $form;
}
public function form_ajax_submit($form, $form_state) {
return 'OK';
}
...
Но когда я нажимаю кнопку "Добавить" (отправить) и некоторое время вижу значок Drupal "пожалуйста, подождите" , в итоге я получаю 500 ошибок для моего запроса ajax:
Должен ли я как-то зарегистрироваться form_ajax_submit
? Обратите внимание, что это функция-член ProjektForm
. И я использую ProjektForm
внутри своего пользовательского модуля, который отображает его из блока.
Что я хочу сделать, так это отправить данные из формы через AJAX (и здесь я получаю ошибку 500), подтвердите ее и отобразите следующую форму (через ajax, заменив предыдущую без перезагрузки страницы).
1 answers
Вам нужно добавить свой класс пространства имен в свойство callback
.
Например:
'callback' => 'Drupal\mymodule\Form\ProjektForm::form_ajax_submit'
Или
'callback' => [$this, 'form_ajax_submit']
Вам также необходимо убедиться, что оболочка и префиксный html-идентификатор совпадают.
Наконец, после того, как вы все это сделаете, проверьте свои журналы для получения более подробной информации об ошибке, вызвавшей ответ 500.
Удачи!