1

我已经覆盖了 Prestashop ordercontroller.php 文件。

其中有一个 switch 语句,它根据我们所处的步数执行某些任务。

当我在第 1 步时,如果出现某些错误,我需要返回第 0 步。现在,如果我重定向到第 0 步,我设置的错误就会丢失。我设置错误如下。

if(some condition)
{
      $this->errors[] = 'There is an error';
      Tools::redirect('index.php?controller=order');
}

我认为发生的是 prestashop 在重定向中生成了一个新请求,并且控制器中设置的错误丢失了。现在有另一个选项可以更改步骤和 switch 语句,但由于 case 语句已经在执行,我似乎不可能切换步骤。

示例代码:

  switch($step)
  {
       case 0:
              //load the step 0
              break;

       case 1:
              //load the step 1
              checkforerrors();
              break;

       case 2:
              //load the step 2
              break;

       case 3:
              //load the step 3
              break;
  }

现在第 1 步中的函数 checkforerrors() 想要转移到第 0 步。

4

1 回答 1

1

尽管这个问题已经很老了,但它可能会对某人有所帮助:

PrestaShop 创建的重定向是一个 302 (HTTP) 重定向,它会导致用户的浏览器请求一个不同的 URL 作为一个全新的请求。这就是旧请求的错误丢失的原因。

无法在 PHP switch 语句的步骤之间切换(AFAIK),但您可以简单地将代码从第 0 步案例移到专用方法中。因此,如果您在第 1 步中遇到任何错误,您只需调用包含第 0 步相关代码的方法,就像您实际上在第 0 步时一样。

于 2013-11-11T19:53:32.463 回答