在我的控制器中我用这种方式。我想通过重定向
将可变数据传递给控制器的索引函数$in=1;
redirect(base_url()."home/index/".$in);
我的索引函数是
function index($in)
{
if($in==1)
{
}
}
但是我得到了一些错误,比如未定义的变量 我该如何解决这个问题?
答案 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)
更多信息将非常有用,因为这应该有效。
你可以检查的事情:
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);
继续努力!