好的,所以在我的基本控制器(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
提前感谢您的帮助!
加里
答案 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
关键字创建模型类的独立实例。