0

一整天以来,我一直在尝试寻找最佳解决方案以重定向到请求的同一页面。意味着我有一个编辑操作页面。我可以从任何地方在此页面上移动,无论是详细信息、视图、最新、最近,还是从我可以移动到编辑操作的任何其他操作。我想要的是我想再次移动到它被重定向的最后一个动作。在谷歌搜索时,我得到了解决方案

`$this->redirect($this->referer());` //or 
`$this->redirect(Controller::referer());` 

在控制器中使用以移动到,但它会再次恢复到编辑页面,因为它仅从该页面导航。

其他解决方案告诉我使用隐藏变量的值

`echo $this->Form->input('Song.referer', array('type' => 'text', "value"=>$this->request->referer()));` 

像这样并在成功编辑时请求这个变量就可以了。但是,如果在控制器上进行验证,则会失败,因为在出​​现错误时会打开同一页面,因此我的推荐人会更改。在这种情况下,最佳实践是什么。我是否应该保存会话和每次调用 main 我的推荐人或 cakephp 2.3 可用的其他东西

4

2 回答 2

0

我使用这种方法:

当我在我的操作中创建指向我的编辑页面的链接时,我添加了一个“推荐人”参数

$this->Html->link('Add', array('action' => 'add', 'referer' => 'detail'));

在我的控制器中,然后我读取引用者的值,并在保存数据后重定向到正确的页面,即使在验证错误的情况下,引用者的值仍保留在页面的 url 中

这不是一个很好的解决方案,因为它对看到 url 的用户不透明,并且可以更改引用者来更改 url 本身。但它有效且易于实施

于 2013-10-17T18:35:49.910 回答
0

将最后一个位置保存在隐藏字段中,例如。

$this->request->data["Business"]["referer"] = $this->referer();

现在将可选条件放在保存功能上,以像这样在页面上重定向。

if ($this->Business->save($this->request->data)) {
    (isset($this->request->data["Business"]["referer"]) && !empty($this->request->data["Business"]["referer"]) ? $this->redirect($this->request->data["Business"]["referer"]) : $this->redirect(array("action" => "index"));
}
于 2015-08-03T06:52:26.953 回答