繁体   English   中英

如何在codeigniter中使用重定向传递数据

[英]How to pass a data with redirect in codeigniter

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

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

我的索引函数是

function index($in)
{
    if($in==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')

因此,在控制器中,您可以拥有一个功能:

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

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

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

   }
}

我放了 segment(3) 因为在你的例子中 $in 是在 2 个破折号之后。 但是如果你有这个链接结构: www.mydomain.com/subdomain/home/index/$in你将不得不使用segment(4)

希望有帮助。

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

步骤 1(后功能):

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

Step2(重定向功能):

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

如果你想让事情复杂化,这里是如何:

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

保持良好的工作!

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

您可以检查的事项:

  • 你的控制器是 home.php 吗? 要去redirect(base_url()."home"); 显示您的主页?
  • 公开您的索引函数。

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

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

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

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

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

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

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

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

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

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

然后转义数据只需将其包装在新的esc()函数中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM