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

Posted

技术标签:

【中文标题】如何在 Codeigniter 中将变量从一个控制器传递到另一个控制器【英文标题】:how to pass a variable from one controller to the other in Code igniter 【发布时间】:2012-09-30 18:13:43 【问题描述】:

我刚刚开始学习 Code Igniter 。

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

任何帮助将不胜感激。

在此先感谢:)

【问题讨论】:

在会话中存储变量 【参考方案1】:

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

第一步是初始化会话库:

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

然后将信息存入flash data中:

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

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

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

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

【讨论】:

@Aditi 您是否也在第二个控制器中初始化了会话库? 你想发布你在问题中写的内容,我会看看吗?据我所知,它应该可以工作,所以我只能假设您的代码中存在错误。【参考方案2】:

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

【讨论】:

我同意这一点。 CI 具有通过 URI 访问控制器的特定路由。会话数据在这里很有用 $this->sessions->set_userdata('data',$data);重定向('second_cont.php');【参考方案3】:

好的,下面是关于 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

【讨论】:

【参考方案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 允许您使用控制器名称、方法名称和值从控制器重定向 url,然后您可以在另一个控制器中获取值。

// Passing the value 
redirect('/another_controller_name/method_name/variable');

然后你可以在另一个控制器中获取值

public function method_name($variable)

echo $variable;

就是这样……

【讨论】:

您的答案不会改变任何东西,它已经在上面回答并且与现有答案相同。 @Farhad,我不同意。这个答案显示了传递变量的两种方式:Matthew Daly 和 kalpesh patel 以及 Prasanth 的答案所描述的方式。事实上,我不确定这对我来说是不是最好的答案。 如果用户刷新页面怎么办? flash 数据变量不再存在所以...代码将失败【参考方案5】:

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

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

这就是你可以将值从一个控制器传递到另一个控制器的方式......

【讨论】:

【参考方案6】:

尽可能坚持参加会议。但是我不强烈推荐另一种选择(用于 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 中允许的字符串,因此您不能使用特殊字符(例如 %@$)

【讨论】:

以上是关于如何在 Codeigniter 中将变量从一个控制器传递到另一个控制器的主要内容,如果未能解决你的问题,请参考以下文章

将变量从视图传递到视图 codeigniter

如何在codeigniter中将数据从视图发送到控制器

在codeigniter中将数组从控制器传递到模型

如何在 Codeigniter 中将值从视图传递到模型

如何在 Laravel 中将变量从视图传递到控制器而不使用 URL 或表单

如何在codeigniter中将ajax选择的依赖下拉选项传递给mysql数据库