2010-12-20 69 views
0

好了,在我的基本控制器(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 

从我可以告诉,似乎装载机类,当被应用到成员类,以某种方式仍然引用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 

在此先感谢您的帮助!

加里

回答

2

我想你感到困惑MVC如何工作的笨。你为什么使用loader类来创建一个控制器?为什么要在控制器类之外创建模型的独立实例?

在CodeIgniter中,您的URL表示您的控制器方法的路径。这意味着,你的“基地控制器”应自动进行,如果你去实例:

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关键字创建模型类的独立实例。

+0

@treeface - 我不认为我的意思是使用loader类来设置控制器。我的意思是使用loader类来设置特定的对象。当我最初设置库时,我无法加载模型。看起来像模型加载只在图书馆工作时,我做了一个控制器。这就是我想要做的事情:我的基本控制器是page.php,我正在使用__remap(),以便/ page/something的所有url都转到此控制器。从这里开始,我希望能够根据定义的类(如成员,用户等)来实例化各种对象。您能否建议正确的方法来执行此操作?谢谢! – Gary 2010-12-20 19:18:48

+0

@treeface - 好吧,我想我越来越近了。在page.php中,我调用模型,它返回我需要的数据,*然后*我通过包含该模型数据作为库调用的一部分来调用库实例化对象。我在正确的道路上吗? – Gary 2010-12-20 19:24:25

+0

@Gary如果要从库中的模型中获取数据,则需要获取对当前正在使用的CI控制器的引用。要在你的控制器中做到这一点,你应该这样做:'$ CI =&get_instance();'。现在你可以通过'$ CI-> my_model-> getMyData();'来调用模型。 – treeface 2010-12-20 19:34:28