【问题标题】:CodeIgniter - Model loaded but can't be used?CodeIgniter - 模型已加载但无法使用?
【发布时间】:2013-08-04 14:32:05
【问题描述】:

好的。所以我正在使用 CI 开发一个网站。这是我的控制器的结构:

class MY_Controller extends Controller
class User extends MY_Controller
class User_Model

所以,我在 User 控制器的构造函数中加载了 User_Model。我知道它已正确加载,因为我试图从 User_Model 打印一些东西并且它工作得很好。但是,当我从 User 控制器使用 User_Model 中的功能之一时,它开始给我错误。这是我收到的错误:

未定义属性:User::$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');
    }
}

这是用户模型

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

【问题讨论】:

  • 你能把你的代码粘贴到这里吗?很难用魔法调试问题
  • 我已经编辑了我的原始帖子。
  • 我也遇到过这个问题:这并没有解决我的问题,但读起来很有趣:grasshopperpebbles.com/codeigniter/…
  • 试试 $this->load->model('User_model', '', TRUE);

标签: php codeigniter autoloader


【解决方案1】:
$this->load->model('user_model');

应该阅读

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

模型名称区分大小写!

【讨论】:

    【解决方案2】:

    您是否使用语法 $this->User_Model->function_name() 调用函数?

    我也知道我过去也遇到过区分大小写的问题。

    【讨论】:

    • 是的。这就是我所做的:$this->load->model('User_Model'); echo $this->User_Model->validate_user($data['username']);在第二行给我错误。
    • 应该是:$this->User_model->validate_user($data['username']);
    【解决方案3】:

    好吧,通过使用 MY_Controller 并直接扩展 Controller 的 User 控制器,解决了这个问题。

    【讨论】:

      【解决方案4】:

      你把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
          //...
        }
      
      }
      

      【讨论】:

      • 是的。我也把它放在那个文件夹里。我还使用了旧式构造函数(与类同名),但它仍然不起作用。哈...这很奇怪。
      • 嗯,我从来没有将加载代码放在构造函数中。我总是在控制器的方法中加载模型并调用模型的方法,例如function index()。我的 Controller 的构造函数通常只是调用父构造函数。
      猜你喜欢
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      相关资源
      最近更新 更多