【问题标题】:Codeigniter when to use redirect() and when to use $this->load->viewCodeigniter 何时使用 redirect() 以及何时使用 $this->load->view
【发布时间】:2011-05-15 23:19:48
【问题描述】:

我对 Codeigniter 还很陌生,我想知道一些 Codeigniter 的最佳实践。我什么时候应该使用redirect() 而不是使用

$this->load->view

似乎当我使用redirect()$this->session->set_flashdata 的工作方式应该是这样,但是当我使用时

$this->load->view

该消息在附加请求后显示。

【问题讨论】:

  • 当然flashdata 不适用于当前的$this->load->view();,因为它设置的会话值仅在浏览器加载的下一页(不是当前页面)中可见。如果您想将数据传递给view(),只需将其作为第二个参数传递给view($page, $data) 调用本身。
  • 我不确定您要做什么。你可能需要花更多的时间阅读 CI 文档。听起来你把事情搞混了......

标签: php codeigniter http-redirect


【解决方案1】:

我认为您确实回答了自己的问题。

当另一个页面顶部的简单 Flash 消息是适当的响应时,使用 redirect(),当你为任何传入请求提供整个页面的反馈时,使用 $this->load->view()可能是。

因此,例如,当新用户注册时,“成功”页面将是一个加载视图,并且当用户在其帐户中编辑某些内容时,可能在同一页面上显示“已保存更改”或类似内容的闪存消息就足够了。

【讨论】:

  • 我正在为此苦苦挣扎,尽管$this->load->view() 似乎缺乏诸如使用闪存消息之类的功能,但它们似乎是多余的。你肯定可以一直使用redirect()吗?
【解决方案2】:

重定向对于另外两个常见问题也很有用:

  • 移动应用中的资源时(并且您希望客户端记住新的 URI)
  • 在 POST 表单作为防止后退按钮重新发布的一个步骤之后

【讨论】:

    【解决方案3】:

    这很简单。您希望用户使用什么网址?如果它们在 url1 上并将数据发回 url1 并且您只是加载不同的视图,它们仍将在 url1 上。如果你重定向到 url2,他们会转到 url2。

    【讨论】:

      【解决方案4】:

      您的观察是正确的,每当您创建一些 flashdata 时,它仅在该时间可用。那是因为flashdata 只是session 的一种特殊类型,它将在您下次请求时可用,并且在下次请求后将自动删除。您不必处理它的删除。

      这个可以用代码测试一下:

      $this->session->set_flashdata( 'test', 'testing' );
      echo $this->session->flashdata( 'test' );
      

      不会打印任何内容。但是现在下次执行以下代码:

      echo $this->session->flashdata( 'test' );
      

      您将找到所需的输出。再做一次不会有任何输出。这就是他们的工作方式。有关详细信息,请查看http://codeigniter.com/user_guide/libraries/sessions.html

      中的 Flashdata 部分

      对于当前页面,您不需要flashdata,只需将数据传递给视图即可。代码如下:

      $data['test'] = 'testing';
      $this->load->view('sample_view', $data);
      

      底线是将flashdataredirect() 一起使用,对于视图,您应该传递变量。希望这会有所帮助!

      【讨论】:

        【解决方案5】:

        您需要使用 PRG - Post/Redirect/Get 模式。 如果页面内容中有表单,则重定向和加载视图是不同的。

        Scenario:
        

        有一个视图 view_1,其中包含用于从帐户中借款的表单。在 view_1 中提交表单后,您想跳转到 view_2 并显示成功消息,并且您有 2 个选项可以实现相同的目的。 1. 加载带有成功消息的 view_2 或 2. 使用带有成功消息的闪存数据重定向到 view_2。

        选项 1: 加载 view_2 并显示成功消息 当您提交表单并刷新时,它会导致重新提交并导致帐户多次扣款,这不应该是这种情况。您也可以看到弹出“确认重新提交表单”的警报。

        选项 2:这是正确答案 PRG

        PRG - 发布/重定向/获取 PRG 是一种 Web 开发设计模式,可防止某些重复的表单提交,这意味着,提交表单 (view_1) -> 重定向 -> 获取 (view_2)

        Under the hood
        

        重定向状态代码 - 带有 HTTP 302 的 HTTP 1.0 或带有 HTTP 303 的 HTTP 1.1

        带有重定向状态代码的 HTTP 响应将在位置标头字段中另外提供一个 URL。带有此代码的响应邀请用户代理(例如 Web 浏览器)向位置字段中指定的新 URL 发出第二个(否则相同)请求。

        重定向状态码是为了确保在这种情况下,Web用户的浏览器可以安全地刷新服务器响应,而不会导致重新提交初始的HTTP POST请求。

        Source

        Double Submit Problem
        

        Post/Redirect/Get Solution
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-29
          • 2016-05-15
          • 1970-01-01
          • 1970-01-01
          • 2016-04-24
          • 2018-11-11
          • 2016-09-23
          • 1970-01-01
          相关资源
          最近更新 更多