我刚刚开始学习 Code Igniter 。
我想知道如何将变量从一个控制器(first_cont.php)传递到另一个控制器(second_cont.php)?
任何帮助,将不胜感激 。
提前致谢 :)
我刚刚开始学习 Code Igniter 。
我想知道如何将变量从一个控制器(first_cont.php)传递到另一个控制器(second_cont.php)?
任何帮助,将不胜感激 。
提前致谢 :)
这将取决于具体情况。如果您想将数据保留一段时间,那么会话数据将是您的选择。但是,如果您只需要使用一次,闪存数据可能更合适。
第一步是初始化会话库:
$this->load->library('session');
然后将信息存储在闪存数据中:
$this->session->set_flashdata('item', $myVar);
最后,在第二个控制器中,获取数据:
$myVar = $this->session->flashdata('item');
显然,这意味着您必须从第二个控制器再次初始化会话库,或者创建自己的基本控制器来加载会话库并让您的两个控制器都继承自该控制器。
我认为在 codeigniter 中你不能在两个不同的控制器之间传递变量。一种明显的机制是使用会话数据。
好的,这是关于 MVC 的一些最容易引用的内容:
控制器用于获取输入,模型用于逻辑,视图用于显示。
现在,严格来说,您不应该希望将数据从控制器发送到另一个控制器。我想不出任何需要这样做的情况。
但是,如果它是绝对需要的,那么你可以简单地使用redirect
重定向到另一个控制器。
就像是:
// some first_cont.php code here
redirect('/second_cont/valuereciever/value1')
// some second_cont.php code here
public function valureciever($value){
echo $value; // will output value1
}
在 Codeigniter 中有很多方法可以将值从一个控制器传递到另一个控制器。
您可以使用 codeigniter Session 将数据从一个控制器传递到另一个控制器。
为此,您必须首先包含会话库
$this->load->library('session');
然后您可以使用变量名称设置闪存数据值。
// Set flash data
$this->session->set_flashdata('variable_name', 'Value');
他们可以通过使用 codeigniter session flashdata 获得所需的值
// Get flash data
$this->session->flashdata('variable_name');
第二个选项 codeigniter 允许您使用控制器名称、方法名称和值从 controll 重定向 url,然后您可以在另一个控制器中获取该值。
// Passing the value
redirect('/another_controller_name/method_name/variable');
然后你可以在另一个控制器中获取值
public function method_name($variable)
{
echo $variable;
}
这一切……
如果您在第一个控制器中使用会话,则不要在第一个控制器中取消设置该会话,而是将您想要的值存储在另一个控制器中,例如,
$sess_array = array('value_name1' => 'value1', 'value_name2' => 'value2');
$this->session->set_userdata('session_name', $sess_array);
然后在另一个控制器中重新加载此会话
$session_data= $this->session->userdata('session_name');
$any_var_name = $session_data['value1'];
$any_var_name = $session_data['value2'];
这就是您可以将值从一个控制器传递到另一个控制器的方式......
尽可能坚持参加会议。但是有一个我不强烈推荐的替代方案(用于 Codeigniter3)。您还可以通过 url 传递数据。您在接收控制器中使用 url 助手和 url 段方法。
发送控制器方法
redirect("controller2/method/datastring", 'refresh');
接收控制器方法
$this->load->helper('url');
$data = $this->uri->segment(3);
这应该适用于默认的 url 结构。对于一个网址:website.com/controller/method/data
获取控制器$this->uri->segment(1)
获取方法$this->uri->segment(2)
此技术的限制是您只能发送 url 中允许的字符串,因此您不能使用特殊字符(例如 %@$)