如何在codeigniter中传递带有重定向的数据

时间:2015-06-21 07:35:50

标签: php codeigniter

在我的控制器中我用这种方式。我想通过重定向

将可变数据传递给控制器​​的索引函数
$in=1;
redirect(base_url()."home/index/".$in);

我的索引函数是

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

    }
}

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

6 个答案:

答案 0 :(得分:18)

使用会话在重定向时传递数据。 CodeIgniter中有一种特殊的方法可以做到这一点叫做#34; set_flashdata"

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

现在你可以在索引控制器上获得in,如

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

  }
}

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

答案 1 :(得分:6)

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

$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)

希望有所帮助。

答案 2 :(得分:1)

我很欣赏这是 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() 函数中。

答案 3 :(得分:0)

更多信息将非常有用,因为这应该有效。

你可以检查的事情:

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

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

答案 4 :(得分:0)

使用会话在重定向时传递数据。分两个步骤

第1步(发布功能):

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

Step2(重定向功能):

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

答案 5 :(得分:0)

如果您要使事情复杂化,请按以下步骤操作:

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);

继续努力!