这是我的控制器
<?php
class Site extends CI_Controller{
public function index(){
$this->load->view('home');
}
}
?>
这是我的模特
<?php
class AdminModel extends CI_Model{
//function to get all the questions
function getAllQA(){
$result=$this->db->get('question');
if($result->num_rows()>0){ //this checks if the result has something if blank means query didn't get anything from the database
return $result;
}
else{
return false;
}
}
}
?>
这是我的观点PAge
<form method="get" action="">
<div id="container">
<?php
$this->load->model('adminmodel');
if($result=$this->adminmodel->getAllQA()){
foreach($result->result() as $rows){
echo $rows->question;
echo $rows->option1;
}
}
else{
echo "No question found";
}
?>
</div>
</form>
所以在视图中调用名为home.php页面的模型,但它显示错误在中的非对象上调用成员函数getAllQA()但是当我在控制器中调用模型时它的工作正常,但为什么在加载和调用视图页面中的方法时显示错误
答案 0 :(得分:2)
将模型加载到控制器的构造函数中
your controller should be like this
<?php
class Site extends CI_Controller{
function __construct()
{
parent::__construct();
$this->load->model('adminmodel');
}
//if you want to pass data or records from database to view do as blow code
public function index()
{
//define an empty array
$data = array();
$records = $this->adminmodel-> getAllQA();
$data['records'] = $records;
//pass the data to view you can access your query data inside your view as $records
$this->load->view('home',$data);
}
}
?>
答案 1 :(得分:1)
您不应该从视图文件加载模型。 Codeigniter是一个MVC框架,这意味着与模型的所有通信都应由控制器处理。
这不起作用的技术原因可能是视图文件不是php类,因此$ this不存在。多数民众赞成,如果你想做这样的事情,不要使用codeigniter!
答案 2 :(得分:0)
不确定你是否已经完成了。 通常,您可以在控制器内调用模型。 在你的情况下,它将是:
class Site extends CI_Controller{
public function index(){
// load your model
$this->load->model('adminmodel');
// do your fancy stuff
$data['allQA'] = $this->adminmodel->getAllQA();
// here you can pass additional data e.g.
$data['userdata'] = $this->adminmodel>getuserinfo();
// pass data from controller --> view
$this->load->view('home',$data);
}
}
您可以分别通过访问$ allQA或$ userdata来访问视图文件中的数据。 E.g。
foreach ($allQA as $qa){
echo $qa->question . "<br>" . $qa->option . "<br>";
}
或div中的某个地方
<div class="userbadge">
<?php echo $userdata; ?>
</div>