2010-02-04 96 views
1

好的。所以我正在使用CI的網站上工作。這裏是我的控制器的結構:CodeIgniter - 已加載模型但無法使用?

class MY_Controller extends Controller 
class User extends MY_Controller 
class User_Model 

因此,我加載User_Model在用戶控制器的構造函數。我知道它正確加載,因爲我試圖從User_Model打印一些東西,它工作得很好。但是,當我使用用戶控制器的User_Model中的某個函數時,它開始給我提供錯誤。這是我收到的錯誤:

未定義的屬性:用戶:: $ User_Model

任何人有任何想法?

這是擴展控制器

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

這是控制器

class User extends MY_Controller { 
    public function __construct() { 
     parent::__construct(); 
     $this->load->model('user_model'); 
     echo $this->user_model->validate_user('hartantothio'); 
    } 
} 

這是User_model

class User_model extends Model { 
    public function __construct() { 
     parent::Model(); 
    }   
    public function validate_user($user, $pass = '') { 
     return '123'; 
    } 
} 
+0

你可以在這裏粘貼你的代碼嗎?它很難調試與魔術的問題 – 2010-02-04 21:20:08

+0

我編輯了我原來的帖子。 – hartanto 2010-02-04 21:41:19

+0

我也遇到了這個問題: 這並沒有解決它的形式,但它是有趣的閱讀: http://grasshopperpebbles.com/codeigniter/codeigniter-call-toa-a-member-function-非 - 對象/ – Dirk 2010-02-06 03:21:09

回答

0

您使用的語法調用該函數,這 - $> User_Model->函數名()?

我也知道我在過去遇到了區分大小寫問題。

+0

是的..這是我做的: $ this-> load-> model('User_Model'); echo $ this-> User_Model-> validate_user($ data ['username']); 在第二行給我錯誤。 – hartanto 2010-02-04 19:57:33

+1

應該是:$ this-> User_model-> validate_user($ data ['username']); – someoneinomaha 2010-02-04 22:25:47

0

那麼,通過使用MY_Controller並直接擴展控制器的用戶控制器,可以解決問題。

0

你把My_Controller文件放在哪裏?我把它放在system/application/libraries,並且沒有任何問題。還有,我用PHP4的構造函數的方式來寫,而不是__constructor

class MY_Controller extends Controller { 

    var $is_ajax_request = ''; 
    var $is_ajax_form = ''; 

    function MY_Controller() 
    { 
    parent::Controller(); 
    //initialize 
    $this->is_ajax_request = ($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'); 
    $this->is_ajax_form = ($this->input->post('ajax') == 'ajax'); 
    log_message('debug', "MY_Controller Class Initialized"); 
    //do extra stuffs here 
    //... 
    } 

} 
+0

是的。我也把它放在那個文件夾中。我也使用了舊式的構造函數(與類相同的名稱),它仍然不起作用。哈......這很奇怪。 – hartanto 2010-02-08 14:52:55

+0

嗯,我從來沒有在構造函數中加載代碼。我總是在控制器的方法中加載模型和調用模型的方法,比如'function index()'。我的控制器的構造函數通常只是調用父構造函數。 – 2010-02-08 22:42:36

2
$this->load->model('user_model'); 

應該讀

$this->load->model('User_model'); 

型號名稱是區分大小寫的!