Пользовательский модуль Drupal, как отправить результаты запроса в форму

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

У меня работает форма, она собирает данные, выполняет запрос, но я не могу отобразить результаты в той же форме. Я много часов гуглил об этом и не могу найти четкого ответа. Форма выглядит так:

public function buildForm(array $form, FormStateInterface $form_state){
   $form['employee_last_name'] = array(
            '#type' => 'textfield',
            '#title' => t('Last Name:'),
            '#default_value' => (isset($record['LAST_NAME'])) ? $record['LAST_NAME']:'',
            '#attributes' => array('class' => array('test')
            )
    );

Когда форма возвращается с результатом, я пытаюсь записать в таблицу формы, но это не работает. Нужно ли мне перестраивать форму, отображать таблицу форм? Я надеюсь отобразить результаты на той же странице, что и поля формы. Я повторяю результат и помещаю его в переменную $rows, используемую в объявлении таблицы.

форма таблицы:

       $form['table'] = [
                '#type' => 'table',
                '#header' => $header_table,
                '#rows' => $rows,
                '#empty' => t('No users found'),
        ];

Спасибо


person Tobi    schedule 29.04.2020    source источник
comment
Вы хотите использовать ajax для отправки формы? Покажите свою функцию отправки.   -  person 2pha    schedule 30.04.2020
comment
Нет, я буквально просто пытаюсь отправить результаты обратно в саму форму. Функция отправки — это место, где происходит запрос:   -  person Tobi    schedule 30.04.2020
comment
Я делаю это в отправке: $form_state = new FormState(); $form_state->setRebuild(); $form_state->set('result', 'test'); $form_state->set('result_table', $form['results_table']); $searchForm = \Drupal::formBuilder()->buildForm('Drupal\workforce_data\Form\SearchForm', $form_state); return [ 'form' => $searchForm, ];   -  person Tobi    schedule 30.04.2020


Ответы (1)


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

public function buildForm(array $form, FormStateInterface $form_state) {
  $form['results'] = $form_state->getValue("results_table");

При первом посещении страницы $form_state->getValue("results_table") не имеет значения и поэтому ничего не отображается. В моей функции submitForm я делаю некоторые вещи с входными данными формы, а затем упаковываю результаты в $form_state следующим образом:

public function submitForm(array &$form, FormStateInterface $form_state) {

  // do stuff with form values and put results into table rows.

  $table = [
    '#type' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#empty'  => "no values"
  ];

  $form_state->setValue("results_table", $table);

  $form_state->setRebuild(TRUE);
}

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

person Peter Cook    schedule 28.09.2020