Рейтинг:1

Как лучше всего передавать параметры маршрутизации?

флаг ae

В submitForm() я хочу перенаправить на контроллер и передать значения формы. Значения формы - это все массивы, кстати.

Вот отправка формы.

публичная функция submitForm (массив и $ форма, FormStateInterface $ form_state) {
    // получаем значения
    $demo_values ​​= $form_state->getValue('demo');
    $data_set_value = $form_state->getValue('data_set');
    $engineering_grades1 = $form_state->getValue('engineering_degrees1');
    $engineering_grades2 = $form_state->getValue('engineering_degrees2');
    $engineering_grades3 = $form_state->getValue('engineering_degrees3');
    $engineering_grades4 = $form_state->getValue('engineering_degrees4');
    $physical_science_степени = $form_state->getValue('physical_science_степени');

   
    # установить данные формы в URL переадресации
    $params = ['demos' => $demo_values,
      'data_set' => $data_set_value,
      'engineering_grades1' => $engineering_degrees1,
      'engineering_grades2' => $engineering_degrees2,
      'engineering_grades3' => $engineering_degrees3,
      'engineering_degrees4' => $engineering_degrees4,
      'physical_science_степени' => $physical_science_степени];
    $form_state->setRedirect('stats_degrees.render_chart',$params);
  }
}

Вот мой YML-файл маршрутизации.

stats_степени.render_form:
  путь: '/statistics/stats-степени'
  значения по умолчанию:
    _title: «Степени инженерных и физических наук, полученные членами недопредставленных групп»
    _form: '\Drupal\stats_degrees\Form\StatsDegreesForm'
  требования:
      _permission: 'доступ к содержимому'
статистика_степеней.render_chart:
  путь: '/statistics/stats-grades-chart/{demos}/{data_set}/{engineering_degrees1}/{engineering_degrees2}/{engineering_degrees3}/{engineering_degrees4}/{physical_science_grades}'
  значения по умолчанию:
    _controller: '\Drupal\stats_degrees\Controller\StatsDegreesController::stats_degrees_chart'
  требования:
    _permission: 'доступ к содержимому'

Вот мой вызов метода контроллера.

общедоступная функция stats_degrees_chart($demos,$data_set,$engineering_degrees1,$engineering_degrees2,$engineering_degrees3,$engineering_degrees4,$physical_science_degrees) {

В настоящее время он выдает ошибку 500 после отправки формы. Есть ли лучший способ передать параметры контроллеру?

Jaypan avatar
флаг de
В чем ошибка? Посмотрите в своих логах.
флаг by
То, что ты делаешь, должно сработать, я думаю. Что произойдет, если вы перейдете к /statistics/stats-grades-chart/ со значениями параметров в URL-адресе? Можете ли вы выполнить отладку, чтобы увидеть, на какой URL-адрес пытается перейти перенаправление формы?
Рейтинг:2
флаг cn

Как лучше всего передавать параметры контроллеру, основано на мнении и зависит от варианта использования, поэтому я стараюсь охватить все возможные подходы.

В общем, есть три других способа передать параметры контроллерам, строку запроса, данные POST и SESSION. Вы можете сериализовать массивы для строки запроса, но проще будет POST или SESSION.

Видеть Как получить параметры $_POST и $_GET в контроллере.

Если вы используете значения сеанса, отключите их в конце контроллера, потому что значения сеанса, которые больше не нужны, плохо подходят для кэширования. Видеть Как я могу уничтожить или отменить сеанс?.

Конкретно для форм больше. Если целью формы является сохранение значений в базе данных (постоянно в объекте или временно в хранилище временных файлов), сначала сделайте это, а затем обратитесь к элементу базы данных через параметр маршрутизации.

Если вы не хотите хранить данные, может иметь смысл отправить данные непосредственно в контроллер, потому что вы не можете прикрепить данные POST к перенаправлению отправки.

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

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

Вы можете использовать частный временный магазин. См. например http://karimboudjema.com/en/drupal/20190315/saving-temporary-values-form-private-tempstore-drupal-8

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

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