如何在Code igniter中将变量从一个控制器传递到另一个控制器

时间:2012-10-10 09:54:29

标签: php codeigniter codeigniter-2

我刚开始学习Code Igniter。

我想知道如何将变量从一个控制器(first_cont.php)传递给另一个控制器(second_cont.php)?

任何帮助都将不胜感激。

先谢谢:)

6 个答案:

答案 0 :(得分:13)

这取决于具体情况。如果您想保留数据一段时间,那么会话数据将是最佳选择。但是,如果您只需要使用一次,则Flash数据可能更合适。

第一步是初始化会话库:

$this->load->library('session');

然后将信息存储在闪存数据中:

$this->session->set_flashdata('item', $myVar);

最后,在第二个控制器中,获取数据:

$myVar = $this->session->flashdata('item');

显然这意味着您必须再次从第二个控制器初始化会话库,或者创建自己的基本控制器来加载会话库并让两个控制器都继承该会话库。

答案 1 :(得分:7)

我认为在codeigniter中你无法在两个不同的控制器之间传递变量。一个明显的机制是使用会话数据。

答案 2 :(得分:7)

好的,这里有一些关于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
}

答案 3 :(得分:4)

在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;
}

那一切......

答案 4 :(得分:1)

如果您在第一个控制器中使用会话,则不要在第一个控制器中取消设置该会话,而是将您想要的值存储在另一个控制器中,例如

$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'];

这是你可以将值从一个控制器传递给另一个控制器....

答案 5 :(得分:0)

坚持参加可能的会议。但是,我不推荐使用其他方法(对于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中允许的字符串,因此不能使用特殊字符(例如%@ $)