【问题标题】:How to pass a data with redirect in codeigniter如何在codeigniter中通过重定向传递数据
【发布时间】:2015-06-21 07:35:49
【问题描述】:

在我的控制器中,我使用了这种方式。我想通过重定向将变量数据传递给控制器​​的索引函数

$in=1;
redirect(base_url()."home/index/".$in);

我的索引函数是

function index($in)
{
    if($in==1)
    {

    }
}

但我遇到了一些错误,例如未定义的变量。
我该如何解决这个问题?

【问题讨论】:

标签: php codeigniter


【解决方案1】:

在重定向时使用会话传递数据。 CodeIgniter 中有一个特殊的方法叫做“set_flashdata”

$this->session->set_flashdata('in',1);
redirect("home/index");

现在您可能会在索引控制器上获得in,例如

function index()
{
 $in = $this->session->flashdata('in');
 if($in==1)
  {

  }
}

请记住,此数据仅可用于重定向并在下一页请求时丢失。如果您需要稳定的数据,则可以使用带参数的 URL & GET $this->input->get('param1')

【讨论】:

  • 这是一种可行的方式,但这也应该可以通过漂亮的 URL 来完成,并且没有会话或查询字符串。
【解决方案2】:

所以在控制器中你可以拥有一个功能:

$in=1;
redirect(base_url()."home/index/".$in);

在目标函数中,您可以像这样访问 $in 值:

$in = $this->uri->segment(3);   
if(!is_numeric($in))
{
  redirect();       
}else{
   if($in == 1){

   }
}

我放了段(3),因为在你的例子中 $in 在 2 个破折号之后。但是,如果您有例如以下链接结构:www.mydomain.com/subdomain/home/index/$in,则必须使用 segment(4)

希望对您有所帮助。

【讨论】:

    【解决方案3】:

    重定向时使用session传递数据。分两步

    第 1 步(发布功能):

      $id = $_POST['id']; 
      $this->session->set_flashdata('data_name', $id);
      redirect('login/form', 'refresh');
    

    Step2(重定向功能):

      $id_value = $this->session->flashdata('data_name');
    

    【讨论】:

      【解决方案4】:

      如果你想让事情复杂化,方法如下:

      application/config/routes.php 下的 routes.php 文件中,插入代码:

      $route['home/index/(:any)'] = 'My_Controller/index/$1'; 
      

      然后在您的控制器 [My_Controller] 上,执行:

      function index($in){
        if($in==1)
        {
           ...
        }
      }
      

      最后,通过重定向传递任何值:

      $in=1;
      redirect(base_url()."home/index/".$in);
      

      继续努力!

      【讨论】:

        【解决方案5】:

        我很感激这是 Codeigniter 3 的问题,但现在在 2021 年我们有 Codeigniter 4,所以我希望这能帮助任何有同样疑问的人。

        CI4 有一个新的重定向功能(它的工作方式与 CI3 不同,因此与类似重用不同),但实际上带有 withInput() 功能,它完全可以满足需要。

        因此,要重定向到您将使用的任何 URL(非命名路由):

        return redirect()->to($to)->withInput();

        在您的控制器中 - 我强调,因为它不能从库或其他地方调用。

        在您期望旧数据的函数中,您可以使用新的old() 函数。因此,如果您在FooBar 的原始帖子中有一个密钥,那么您可以致电old('FooBar')old() 很有用,因为它默认也会转义数据。

        但是,如果像我一样,您想查看整个帖子,那么 old() 没有帮助,因为需要密钥。在那种情况下(有点作弊)你可以这样做:

        print'<pre>';print_r($_SESSION['_ci_old_input']['post']);print'</pre>';

        CI4 在幕后使用与上述答案中相同的闪存数据方法,因此我们可以提取相关的会话数据。

        要转义数据,只需将其包装在新的 esc() 函数中即可。

        【讨论】:

          【解决方案6】:

          更多信息会很有帮助,因为这应该可以工作。

          您可以检查的事项:

          • 您的控制器是否命名为 home.php?转到redirect(base_url()."home"); 会显示您的主页吗?
          • 公开你的索引函数。

            public function index($in) {
                 ....
            }
            

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-05-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-14
            • 2016-09-25
            • 2020-09-29
            相关资源
            最近更新 更多