Php 有没有办法从Drupal8表单操作中删除查询字符串?

Php 有没有办法从Drupal8表单操作中删除查询字符串?,php,forms,drupal,drupal-8,Php,Forms,Drupal,Drupal 8,我正在制作一个多步骤表单。我希望每个步骤都有相同的url。我的FormTwo有一个外部动作,所以用户数据直接进入卡片处理程序,Way。所以我的第二阶段表单不是由我的drupal站点处理的,而是由Eway处理的。提交第二阶段表格后,用户将通过Way返回www.my-site.com/payment?AccessCode=blahblahblah 我可以通过\Drupal::request()->query->get('AccessCode')获取访问代码,但是\Drupal::request()-

我正在制作一个多步骤表单。我希望每个步骤都有相同的url。我的FormTwo有一个外部动作,所以用户数据直接进入卡片处理程序,Way。所以我的第二阶段表单不是由我的drupal站点处理的,而是由Eway处理的。提交第二阶段表格后,用户将通过Way返回www.my-site.com/payment?AccessCode=blahblahblah

我可以通过\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);
  }
公共函数stageThree(数组$form,FormStateInterface$form_state){
$access\u code=\Drupal::request()->query->get('AccessCode');
if(strlen($access_code)){
\Drupal::request()->query->remove('AccessCode');
//使用访问代码做一些事情
$failed=true;
}
//失败的结果是这样的,没有成功的形式。
如果($失败){
$form['message']=[
“#标记”=>”再试一次,
];
$form['submit']=[
“#键入”=>“提交”,
“#value”=>this->t('Back'),
“#提交”=>[”::stageThreeSubmit'],
“#验证”=>[”::stageThreeValidate'],
];
}
返回$表格;
}
公共函数stageThreeSubmit(数组和$form,FormStateInterface$form\U状态){
$form_state->set('stage',2);
$form_state->setRebuild(TRUE);
}
我读到应该避免使用\Drupal::request(),所以我希望有另一个选项真正起作用。
谢谢。

我最终改变了我的方法。我不再像中那样使用$form_state传递值,而是像中那样使用privateTempStoreFactory类,这意味着我不再需要删除查询字符串


这并没有回答问题,反而使问题不再必要,至少对我来说是这样。

URL中的
AccessCode
查询参数来自上一步。如果它是POST变量的一部分,那么它应该是好的。那
AccessCode
首先是从哪里来的呢?
AccessCode
参数是通过way添加的。我在主要问题中提供了更多细节@杨树熊