codeigniter - >加载多个库/类时遇到问题

时间:2010-12-20 15:58:11

标签: php class codeigniter

好的,所以在我的基本控制器(page.php)中,我有以下代码可以正常工作:

   $this->load->library('Siteclass');
   $mysite = new site_model();

siteclass库引用名为site_model的模型,并根据从该模型接收的数据进行实例化。一切都很好。

现在我想加载另一个库,以便我也可以实例化另一个对象。所以我把它添加到page.php:

 $this->load->library('Memberclass');
 $mysite = new member_model();

但现在我收到以下错误:

 Message: Undefined property: Memberclass::$site_model
 Filename: libraries/Loader.php
 Line Number: 1035

据我所知,似乎加载器类在应用于Memberclass时,仍以某种方式引用site_model而不是member_model。我检查了我的代码,我肯定会调用正确的文件。

这是Siteclass.php的样子:

 if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

 class Siteclass extends Controller {
    function __construct() {
        parent::Controller();
        $this->load->model('Site_model');
        $data = $this->Site_model->load_site_data();
        // etc etc

这是Memberclass.php的样子:

if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class Memberclass extends Controller {
function __construct() {
        parent::Controller();
    $this->load->model('Member_model');
        $data = $this->Member_model->load_member_data();
        // etc etc

提前感谢您的帮助!

加里

1 个答案:

答案 0 :(得分:2)

我觉得你对MVC在CodeIgniter中的运作方式感到困惑。为什么使用loader类创建控制器?为什么要在控制器类之外创建模型的独立实例?

在CodeIgniter中,您的网址代表控制器方法的路径。这意味着如果您转到:

,您的“基本控制器”应自动实例化
  

www.example.com/memberclass

或者更重要的是,如果您有这样的链接:

  

www.example.com/page

您的/application/controllers目录中应该有一个名为page.php的文件,如下所示:

if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class Page extends Controller {
    function __construct() {
        parent::Controller();
        // etc etc

此外,除非您每次调用此控制器从模型中加载时使用,否则您需要将模型调用放在此类的非构造函数方法中。类似的东西:

class Page extends Controller {
    function __construct() {
        parent::Controller();
    }

    function index() {
        $this->load->model('Member_model');
        $data = $this->Member_model->load_member_data();
        $this->load->view('myview', array('data'=>$data));
    }
}

再次......不完全确定你在做什么背景,但看起来你并没有坚定地站在框架内。基本上没有理由你应该使用loader类加载控制器,而且你没有理由使用PHP的new关键字创建模型类的独立实例。