Я делаю многошаговую форму.Я хочу один и тот же URL для каждого шага.У моего FormTwo есть внешнее действие, поэтому пользовательские данные поступают прямо на людей, занимающихся обработкой карт, Eway.Так что моя форма второй стадии не обрабатывается моим друпальным сайтом, а обрабатывается Eway.После отправки формы второго этапа пользователь отправляется обратно на www.my-site.com/payment?AccessCode=blahblahblah по Eway.
Я могу получить код доступа с помощью \ Drupal :: request() -> query-> get ('AccessCode') но \ Drupal :: request () -> query-> remove ('AccessCode') только удаляет строку запроса из этой записи, поэтомудействие сгенерированной формы заканчивается тем, что www.my-site.com/payment?AccessCode=blahblahblah.Я хотел бы, чтобы это было www.my-site.com/payment.
public function stageThree(array $form, FormStateInterface $form_state) {
$access_code = \Drupal::request()->query->get('AccessCode');
if (strlen($access_code)) {
\Drupal::request()->query->remove('AccessCode');
// do stuff with access code
$failed = true;
}
// Something like this for failed result. No form for success.
if ($failed) {
$form['message'] = [
'#markup' => "<p>Try again</p>",
];
$form['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Back'),
'#submit' => ['::stageThreeSubmit'],
'#validate' => ['::stageThreeValidate'],
];
}
return $form;
}
public function stageThreeSubmit(array &$form, FormStateInterface $form_state) {
$form_state->set('stage', 2);
$form_state->setRebuild(TRUE);
}
Я прочитал, что следует избегать использования \ Drupal :: request () , поэтому янадеясь, что есть еще один вариант, который действительно работает.Спасибо.