2010-12-20 68 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