Codeigniter:将数据从控制器传递到视图
Posted
技术标签:
【中文标题】Codeigniter:将数据从控制器传递到视图【英文标题】:Codeigniter: Passing data from controller to view 【发布时间】:2012-02-25 18:19:50 【问题描述】:我想将$data
从名为poll
的控制器传递给results_view
,但是我得到一个未定义的变量错误。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Poll extends CI_Controller
public function __construct()
parent::__construct();
$this->load->database();
$this->load->helper('form');
public function index()
$this->load->view('poll_view',$data);
public function vote()
echo "Voting Successfull";
$this->db->insert('votes',$_POST);
public function results()
echo "These are the results";
//$query = $this->db->get('votes');
$data = "hello";
$this->load->view('results_view', $data);
Results_view.php
<html>
<?php echo $data; ?>
</html>
【问题讨论】:
$data 应该是数组而不是变量 【参考方案1】:$data
应该是数组或对象:http://codeigniter.com/user_guide/general/views.html
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('results_view', $data);
results_view.php
<html>
<?php
//Access them like so
echo $title.$heading.$message; ?>
</html>
【讨论】:
我已经阅读了关于如何将数据从控制器传递到 CodeIgniter 中查看的文章cloudways.com/blog/how-to-pass-data-in-codeigniter @Lawrence 我尝试了您的代码,该代码在单击后但之前有效 @NarendraVerma 您可能在某处使用了 $_GET 参数,并且在使用前没有检查其设置。【参考方案2】:简单来说,
控制器中的$data['a']
在您的视图中变为$a
。 ($data
不会出现在您的视图中,只有索引可用)
例如
Controller:
$data['hello']='hellow world';
view:
echo $hello;
【讨论】:
是的,你说得对。 $data 不直接存在于视图中。在视图上传递值的最佳方法是 $data['hello']【参考方案3】:你只需要创建一个数组,你使用codeigniter对吗?
控制器示例:
$data['hello'] = "Hello, world";
$this->load->view('results_view', $data);
在页面“results_view”中,您只需:
<?php echo $hello;?>
Obs:可以创建n条数据,注意名字,做成数组即可。
Obs²:要使用数据,请使用带有回显的数组键。
【讨论】:
我尝试了您的代码,该代码在单击后但之前有效如果我刷新页面,我得到未定义的变量:你好。有什么帮助吗?【参考方案4】:视图不会将数据称为“数据”
控制器将包含一个关联索引(不确定这是否是正确的命名法)用于数据,例如“stuff”,看起来像 $data['stuff']
你会在视图中echo
,所以:echo $stuff;
不是 echo $data;
我是一个卑微的代码提琴手,但我真的很喜欢 CodeIgniter,所以如果我对山雀有这方面的了解,请原谅。
还有一件事——你的构造函数肯定有点浪费。所有库和帮助程序的加载都是通过自动加载文件完成的。
【讨论】:
【参考方案5】:您可以创建属性$data = []
;在 CI_Controller(path: system/core/Controller.php) 内部并存储所有数据以显示在视图中。您可以在 CI_Controller 中加载语言、菜单等常用数据。您还可以为控制器中的视图添加特殊数据。 (例如:$this->data['message'] = "Hello world";
)
最后,你可以在加载视图时传递$this->data
来查看(例如:$this->load->view('view_name',$this->data);
)
希望对你有帮助
【讨论】:
【参考方案6】:你可以这样做
在控制器中定义数组
$data['hello'] = "hello";
并将变量传递给视图
echo $hello;
【讨论】:
这个答案只会给页面添加冗余信息,可以安全删除。【参考方案7】:如果你通过了
$data = your code
$this->load->view('your-page', $data);
并以
的形式获取视图上的数据<?php echo $data;?>
它不起作用,因为 ci 不理解这种模式。如果想将值表单控制器传递给查看,那么你可以试试这个 -
控制器 -
$data['any-name'] = your values;
$this->load->view('your-page', $data);
那么在你看来,你可以通过 -
<?php echo $any-name;?>
希望对你有所帮助。
【讨论】:
***.com/a/9322340/2943403 此答案中正确的部分是多余的。可以安全地删除此帖子。【参考方案8】:在你的控制器中你可以通过
$data['poll'] = "Your results";
在你看来你可以调用
echo $poll;
【讨论】:
这个答案只会给页面添加冗余信息,可以安全删除。【参考方案9】:在控制器中:
$data["result"] = $this->login_model->get_login(); // Get array value from DB..
$this->load->view('login-form',$data); // Pass the array to view
在视图中:
print_r($result); // print the array in view file
【讨论】:
这个答案只会给页面添加冗余信息,可以安全删除。【参考方案10】:好的,我终于解决了。你真的应该有一个模型(这很有帮助)
在你的模型中做类似的事情
型号
class poll_model extends CI_MODEL
function __construct()
$this-load->database();
function get_poll
$this->db->query("SELECT * FROM table");
$row = $query->row();
$obj = array(
'id' => $row->id
);
return $obj;
现在,如果您有多个 id 说 poll 的名称 # 您可以添加到数组中。 现在在你的控制器中做
class Poll extends CI_Controller
public function __construct()
parent::__construct();
$this->load->database();
$this->load->helper('form');
$this->load->model('poll_model');
public function index()
$data["a"] = $this->poll_model->get_poll();
$this->load->view('poll_view',$data);
最后在VIEW放
<? echo $a["id"]; ?>
这是一个很大的帮助。我通过测试发现了它,它对我有用。
【讨论】:
【参考方案11】:我已经看到了上述所有答案,所以当我必须将数据从控制器加载到我的视图时,我会这样做。 将数据从控制器传递到视图:
public function your_controller()
// Your Necessary Code
// You have the $data, $data2, $data3 to post to the view.
$this->load->view('your_view_directory or view_page',['data'=>$data, 'data2'=>$data2, 'data3'=>$data3... so on ]);
在视图端,您可以简单地检索该数据:
显示您可以简单地使用echo
、print
、print_r
。如果你想循环它,你也可以这样做。
【讨论】:
【参考方案12】:在控制器中:
公共函数product()
$data = array("title" => "Books", "status"=>"Read","author":"arshad","company":"3esofttech",
"subject":"计算机科学");
从模型到控制器的数据
$this->load->model('bookModel');
$result = $this->bookModel->getMoreDetailsOfBook();
**Add *$result* from model to *$data* array**
$data['tableRows'] = $result;
$data 从控制器到视图
$this->load->view('admin/head',$data);
并在视图文件中访问 视图/user.php
<?php echo $data;
foreach($tableRows as $row) echo
$row['startData']; ?>
【讨论】:
【参考方案13】:代替
$data = "hello";
$this->load->view('results_view', $data);
做
$data['hello'] = 'hello';
$this->load->view('results_view', $data);
在您的控制器文件中,控制器会将具有 hello 作为 string 的 data 发送到 results_view 并且在您的视图文件中,您可以通过
echo $hello;
【讨论】:
这个答案只会给页面添加冗余信息,可以安全删除。以上是关于Codeigniter:将数据从控制器传递到视图的主要内容,如果未能解决你的问题,请参考以下文章
将数组数据从视图传递到控制器并反向 php codeigniter