Кнопка отправки формы с помощью 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: enter image description here

Должен ли я как-то зарегистрироваться form_ajax_submit? Обратите внимание, что это функция-член ProjektForm. И я использую ProjektForm внутри своего пользовательского модуля, который отображает его из блока.

Что я хочу сделать, так это отправить данные из формы через AJAX (и здесь я получаю ошибку 500), подтвердите ее и отобразите следующую форму (через ajax, заменив предыдущую без перезагрузки страницы).

Author: PolGraphic, 2017-01-23

1 answers

Вам нужно добавить свой класс пространства имен в свойство callback.
Например:

'callback' => 'Drupal\mymodule\Form\ProjektForm::form_ajax_submit'

Или

'callback' => [$this, 'form_ajax_submit']

Вам также необходимо убедиться, что оболочка и префиксный html-идентификатор совпадают.

Наконец, после того, как вы все это сделаете, проверьте свои журналы для получения более подробной информации об ошибке, вызвавшей ответ 500.

Удачи!

 3
Author: Stefanos Petrakis, 2017-01-23 23:28:53