CodeIgniter:在同一个控制器中加载多个模型

Pet*_*tar 4 codeigniter

我搜索了整个互联网,要么没有人提到我的问题,要么我是愚蠢的,或者也许这只是编码的糟糕日子.

情况如何:

  • 控制器"源"
  • 模型"来源"
  • 模特"登录"

"登录"模型从autoload.php加载,然后在每个控制器的构造函数中我有$ this-> login-> check(),它检查用户是否已登录(显然).然后在一些方法中,我使用"源"模型连接到数据库.

我尝试从自动加载阵列中加载两个模型,我也尝试按照这里描述的方式加载它们,但它显然是一个旧的CI版本(该线程是从2008年开始),我尝试了所有可能的方法.心神.

无论如何,结果如下:

遇到PHP错误

严重性:注意

消息:未定义属性:Source :: $ login

文件名:controllers/source.php

行号:10

致命错误:在第10行的...\application\controllers\source.php中的非对象上调用成员函数check()

我缺少什么想法或如何修复它?我被困了几个小时,我没有任何想法,我能做什么......

编辑1:这是来自"源"控制器的代码:

class Source extends CI_Controller {

class Source extends CI_Controller {

  function __construct() {
      parent::__construct();

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

      $this->login->check();
  }

  function index() {
      // Pagination config, getting records from DB

      $this->load->view('templates/layout', $data);
  }

  function add() {
      $this->load->model('source', '', true);

      $btn = $this->input->post('btn');

      if(isset($btn)) {
          // More form validation

          if($this->form_validation->run() == TRUE) {
              if($btn == "Add") {
                  // here I am supposed to use the source model...
              }
          }
      }

      $data['page'] = 'source_add';

      $this->load->view('templates/layout', $data);
   }

 }

?>
Run Code Online (Sandbox Code Playgroud)

}

?>

编辑2:login.php:

class Login扩展CI_Model {

<?php

class Login extends CI_Model {

  function __construct() {
      parent::__construct();
  }

  function authenticate($username, $password) {
      // the login script comes here
  }

  function logged() {
      if($this->session->userdata('logged') == true) {
          return true;
      } else return false;
  }

  function check() {
      if(!$this->logged()) {
          redirect('/authentication');
      }
    }
  }
?>
Run Code Online (Sandbox Code Playgroud)

}

?>

Car*_*ora 6

通常,Models的类名应以_model结尾,因此它不会与具有相同名称的控制器发生冲突,因此请尝试更改

class Login extends CI_Model {
Run Code Online (Sandbox Code Playgroud)

class Login_model extends CI_Model {
Run Code Online (Sandbox Code Playgroud)