【发布时间】:2012-09-30 18:13:43
【问题描述】:
我刚刚开始学习 Code Igniter 。
我想知道如何将变量从一个控制器(first_cont.php)传递到另一个控制器(second_cont.php)?
任何帮助将不胜感激。
在此先感谢:)
【问题讨论】:
-
在会话中存储变量
标签: php codeigniter codeigniter-2
我刚刚开始学习 Code Igniter 。
我想知道如何将变量从一个控制器(first_cont.php)传递到另一个控制器(second_cont.php)?
任何帮助将不胜感激。
在此先感谢:)
【问题讨论】:
标签: php codeigniter codeigniter-2
这将取决于具体情况。如果您想将数据保留一段时间,那么会话数据将是您的选择。但是,如果您只需要使用一次,闪存数据可能更合适。
第一步是初始化会话库:
$this->load->library('session');
然后将信息存入flash data中:
$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 允许您使用控制器名称、方法名称和值从控制器重定向 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 中允许的字符串,因此您不能使用特殊字符(例如 %@$)
【讨论】: