【问题标题】:CakePHP Redirect method not working?CakePHP 重定向方法不起作用?
【发布时间】:2012-02-13 15:34:45
【问题描述】:

我们开始关注网站 cakephp.org - http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html 上托管的 CakePHP 博客教程

此时,我们在提交表单后陷入重定向(即功能编辑/添加)。这就是我们的代码的样子:

public function edit($id = null) {
    $this->Post->id = $id;

    if ($this->request->is('get')) {
        $this->request->data = $this->Post->read();
    } else {
        if ($this->Post->save($this->request->data)) {
            $this->Session->setFlash('Your post has been updated.');
            $this->redirect($this->referer());
        } else {
            $this->Session->setFlash('Unable to update your post.');
        }
    }
}

在评论$this->redirect($this->referer()); 行后,页面引用了他自己的...添加行后,它将停留在空白页面上。

示例:http://www.drukwerkprijsvergelijk.nl/posts/

请帮助这只小猫,我们很绝望。

【问题讨论】:

    标签: php mysql cakephp redirect


    【解决方案1】:

    您不能在编辑时使用 referer()。那是因为在第一次 POST 之后,referer 与您现在所在的页面相同。 如果此页面上没有表单发布(例如删除或访问页面后立即编辑/添加),referer() 只能用于重定向。 但即使使用 delete() 你也必须小心。来自“视图”会导致重定向运行到重定向循环...

    您可以将引用者存储在表单中作为隐藏字段并使用它来重定向。

    【讨论】:

    • 它也不适用于我的 add() 方法。 IE。 $this->redirect(array('action' => 'index'));也不行。
    • 如果根本没有重定向,您可能会过早地回显某事(在 php 部分 - bootstrap/controller/model/..),因此标头已发送,您的重定向无法再工作。确保所有 php 文件都没有关闭 ?> 并且在重定向之前根本不输出任何内容。
    • 谢谢马克,我做了几个?>结局,先生,我不会失败的!
    • 成功了吗?你找到重定向问题的根源了吗?
    • 是的,?> 是问题所在;)!
    【解决方案2】:

    由于上述原因标记,您不能在编辑和添加时使用referer()。

    使用类似的东西

    $this->redirect(array('action' => 'view', $id));
    

    $this->redirect(array('action' => 'index'));
    

    改为。

    您也可以尝试在 url 数组中指定控制器:

    $this->redirect(array('controller' => 'posts', 'action' => 'index'));
    

    【讨论】:

      【解决方案3】:

      您的 PostController 或 AppController 中的 PHP 代码之外是否有任何空白?我刚刚查看了您的编辑页面的源代码,它似乎包含一个空格字符。这可能会阻止设置标头,从而阻止重定向工作。

      【讨论】:

      • 所有上面的答案都是显而易见的,首先要检查一下,在我的页面搜索了 5 个小时的语法错误之后,这完全有帮助
      【解决方案4】:

      在过滤功能之前使用这个

          header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); // // HTTP/1.1
          header("Pragma: no-cache");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-05
        • 2014-05-05
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 2020-04-05
        相关资源
        最近更新 更多