Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter何时使用重定向()以及何时使用$this->;负载->;看法_Php_Codeigniter_Http Redirect - Fatal编程技术网

Php Codeigniter何时使用重定向()以及何时使用$this->;负载->;看法

Php Codeigniter何时使用重定向()以及何时使用$this->;负载->;看法,php,codeigniter,http-redirect,Php,Codeigniter,Http Redirect,我对Codeigniter还比较陌生,我想知道一些Codeigniter的最佳实践。我应该在什么时候使用redirect()而不是使用 $this->load->view 似乎当我使用redirect()时,$this->session->set\u flashdata的工作原理与我使用 $this->load->view 该消息在附加请求后显示 我想你真的回答了你自己的问题 使用redirect()当另一个页面顶部的简单flash消息是一个合适的响应时,在为任何传入

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

$this->load->view
似乎当我使用
redirect()
时,
$this->session->set\u flashdata
的工作原理与我使用

$this->load->view

该消息在附加请求后显示

我想你真的回答了你自己的问题

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


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

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

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

  • 这很简单。您希望用户位于哪个url上?如果它们位于url1上,并将数据发布回url1,而您只是加载了一个不同的视图,那么它们仍然位于url1上。如果您重定向到url2,它们将转到url2。

    您的观察是正确的,无论何时创建一些
    flashdata
    ,它都只在特定时间可用。这是因为
    flashdata
    只是一种特殊类型的
    会话
    ,它将在下一次请求时为您提供,并且在下一次请求后它将自动删除。你不必注意它的删除

    这可以通过以下代码进行测试:

    $this->session->set_flashdata( 'test', 'testing' );
    echo $this->session->flashdata( 'test' );
    
    $data['test'] = 'testing';
    $this->load->view('sample_view', $data);
    
    不会打印任何内容。但现在,下次执行以下代码:

    echo $this->session->flashdata( 'test' );
    
    您将找到所需的输出。再做一次不会有任何结果。这就是他们的工作方式。有关详细信息,请查看中的Flashdata部分

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

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

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

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

    Scenario:
    
    有一个视图,视图1,其中有一个表单,用于从帐户中借记资金。在视图_1中提交表单后,您希望跳转到带有成功消息的视图_2,并且您有两个选项来实现相同的目的。1.加载带有成功消息的视图2或2。重定向至查看带有flash数据并带有成功消息的_2

    选项1:加载视图2并显示成功消息 当您提交表单并刷新时,它将导致重新提交,并导致从帐户中多次借记,但事实并非如此。您也可以看到弹出的警报“确认表单重新提交”

    选项2:这是正确的答案 PRG

    PRG-发布/重定向/获取 PRG是一种web开发设计模式,它可以防止重复的表单提交,也就是说,提交表单(视图1)->重定向->获取(视图2)

    重定向状态代码-HTTP 1.0与HTTP 302或HTTP 1.1与HTTP 303

    带有重定向状态代码的HTTP响应还将在location header字段中提供URL。使用此代码的响应会邀请用户代理(例如web浏览器)对位置字段中指定的新URL发出第二个相同的请求

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


    当然
    flashdata
    在当前
    $this->load->view()上不起作用,因为它设置的会话值仅在浏览器加载的下一页(而不是当前页面)上可见。如果要将数据传递到
    view()
    ,只需将其传递到
    视图($page,$data)
    将其本身作为第二个参数调用即可。我不确定您要做什么。您可能需要花更多的时间阅读CI文档。。听起来你把事情弄混了一点……虽然我正在努力解决这个问题,但它们似乎是多余的,尽管
    $this->load->view()
    似乎缺少flash消息使用等功能。当然,您可以不必总是使用
    重定向()
    Post/Redirect/Get Solution