返回CakePHP 3中的被调用页面

sve*_*reg 3 php cakephp cakephp-3.0

我有一个动作,/ controller/edit,可以从多个位置点击(例如/ controller/index和/ controller/view).

一旦用户完成了对记录的编辑并单击了save,我希望它们返回到它们来自的位置(分别是/ controller/index或/ controller/view).

起初,我尝试将用户访问的每个页面存储在他们的会话中(例如,主页>索引>编辑),然后重定向到该列表中倒数第二个条目 - 这样就可以正常工作直到他们打开另一个选项卡.如果,当他们正在编辑记录时,他们打开另一个标签并在其他地方离开,他们的会话变量一直在建立(主页>索引>编辑>帮助>帮助页面),当时间到了重定向第二个 - -last条目​​不再包含正确的操作.

我的编辑操作/控制器/编辑如何在保存时将用户重定向回他们来自的引用页面,而不管用户在其他选项卡中做了什么?

编辑:保存后我不能使用referrer,因为进程是这样​​的:

  1. 用户在/ controller/index或/ controller/view上
  2. 用户点击进入/ controller/edit(引用者是/ controller/index或/ controller/view)
  3. 用户对记录和点击保存进行更改,表单提交到/ controller/edit(referrer是/ controller/edit)
  4. 我现在想要将它们重定向到/ controller/index或/ controller/view,但这不再是在referrer中

小智 5

用于返回您来自的任何地方

return $this->redirect($this->referer());
Run Code Online (Sandbox Code Playgroud)


小智 5

我不得不处理同样的问题,我做到了:

1)在我的控制器的GET部分中,将引用程序设置为如下所示的视图变量:

$this->set('redirect', $this->referer());
Run Code Online (Sandbox Code Playgroud)

2)在表单中,设置一个名为“ redirect”的隐藏控件:

echo $this->Form->hidden('redirect', ['value' => $redirect]);
Run Code Online (Sandbox Code Playgroud)

3)在控制器中,在处理POST请求之后,重定向到隐藏输入的值:

if (isset($this->request->data['redirect'])) {
    $this->redirect($this->request->data['redirect']);
}
Run Code Online (Sandbox Code Playgroud)

当然,这可以抽象为一个组件,也可以使用会话,但是这种方法对我有用。