2010-02-04 84 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'); 

型号名称是区分大小写的!