我已经覆盖了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步。
答案 0 :(得分:1)
即使这个问题很老,也可能对某人有所帮助:
PrestaShop创建的重定向是一个302(HTTP)重定向,它使用户的浏览器请求一个不同的URL作为一个全新的请求。这就是旧请求错误丢失的原因。
无法切换PHP switch语句的步骤(AFAIK),但您只需将代码从步骤0的情况转移到专用方法即可。因此,如果您在步骤1中遇到任何错误,您只需调用包含步骤0的相关代码的方法,就像您实际上在步骤0中一样。