[英]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);
保持良好的工作!
更多信息将非常有帮助,因为这应该有效。
您可以检查的事项:
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.