Есть ли способ удалить строку запроса из действия формы drupal 8? - PullRequest
0 голосов
/ 19 сентября 2019

Я делаю многошаговую форму.Я хочу один и тот же 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 () , поэтому янадеясь, что есть еще один вариант, который действительно работает.Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2019

Я закончил тем, что изменил свой подход.Вместо использования $ form_state для передачи значений, как в https://git.drupalcode.org/project/examples/blob/8.x-1.x/form_api_example/src/Form/MultistepForm.php, я использую класс privateTempStoreFactory, как в https://www.sitepoint.com/how-to-build-multi-step-forms-in-drupal-8/, что означает, что мне больше не нужно удалять строку запроса.

Это не отвечает на вопрос, скорее делает вопрос больше не нужным, по крайней мере для меня.

...