我的codeigniter模型在Controller中正常工作但在视图页面中调用时显示错误

时间:2013-09-07 05:52:10

标签: codeigniter

这是我的控制器

<?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()但是当我在控制器中调用模型时它的工作正常,但为什么在加载和调用视图页面中的方法时显示错误

3 个答案:

答案 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>