【问题标题】:How to fix CodeIgniter: Fatal error "Class 'CI_Model' not found"如何修复 CodeIgniter:致命错误“找不到类‘CI_Model’”
【发布时间】:2015-12-06 20:59:54
【问题描述】:

我已经尝试过其他帖子中与此相关的建议,但没有任何乐趣。我正在尝试在 CodeIgniter 中创建一个从数据库获取数据的模型,但它说找不到类 CI_Model。我在主索引文件中的系统路径设置正确,并且我已经在自动加载文件中自动加载了这个模型,我无法找出问题所在。我意识到很多功能都是一样的,我还没有写完,我用第一个作为占位符。

**编辑:我根据人们的建议更新了所有这些文件,但仍然遇到同样的错误。

型号

<?php

class Model_appointments extends CI_Model {

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

    public function getAppointments() 
    {
        $query = $this->db->get('appointments');
        return $query->result();
    }

    public function getActiveAppointments() 
    {
        $query = $this->db->get('appointments');
        return $query->result();
    }

    public function getCancelledAppointments() 
    {
        $query = $this->db->get('appointments');
        return $query->result();
    }
    public function addAppointments() 
    {
        $this->name    = $_POST['name'];
        $this->details = $_POST['details'];
        $this->date    = time();

        $this->db->insert('appointments', $this);
    }
}

?>

前置控制器

<?php 

include 'application/controllers/databaseConnection.php';
include 'application/models/Model_appointments.php';

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Controller_name extends CI_Controller
    {

        public function  __construct()
        {
            parent::__construct();
            $this->load->model('Model_appointments'); #load Model

        }
    }

class Front_controller {

    public function startFrontController() {

        $newDatabase = new Mydb('localhost', 'root', '', 'webinnovate');
    }
}

$newController = new Front_controller();
echo $newController->startFrontController();

$newAppointments = new Model_appointments();
$newAppointments->getAppointments();

?>

**控制器

<?php 

$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'webinnovate';

class Mydb {

    public $query;
    public $myConnection;

    public function __construct($host, $username, $password, $dbname) 
    {
        //establish connection
        $this->myConnection = mysqli_connect($host, $username, $password, $dbname);
    }
}

?>

【问题讨论】:

  • 你的控制器叫什么名字?
  • 我有一个名为 databaseConnection.php 的控制器和一个 frontController,我会为它们添加代码。
  • 您可以在config/database.php中选择您的数据库
  • 不知道你正在做的事情是否会起作用,但你没有像这样调用 codeigniter 控制器:class Mydb extends CI_Controller {
  • 如果您不熟悉 codeigniter,请尝试学习 ci 文档中的教程,以了解 codeigniter 如何处理模型、连接到数据库等。

标签: php codeigniter


【解决方案1】:

转到config/database.php

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root', # user name
    'password' => '', # password
    'database' => 'webinnovate', # Database name
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

config/autoload.php

$autoload['libraries'] = array('database'); #load database library

在你的控制器中

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Controller_name extends CI_Controller
    {

        public function  __construct()
        {
            parent::__construct();
            $this->load->model('modelAppointments'); #load Model

        }
    }

【讨论】:

  • 我已经完成了所有这些,我现在得到“不允许直接访问脚本”。
【解决方案2】:

这发生在我身上! 在我的本地 Windows 系统上很好,但是当我迁移到 Linux 服务器(我的托管服务器)时,它会产生相同的错误: 这是由于Linux的大小写敏感。

这些是 linux 中的两个不同的词:
'CI_Model'
'ci_model'

所以我建议你检查你的模型名称,如果你正在保存模型 CI_model 的名称。并在“CI_Model”之类的地方访问它。
在 Linux 系统中 CI_Model 和 CI_model 是两个不同的文件。

【讨论】:

  • CI_Model 应该是 core\Model.php 中的一个类。显然,它应该知道如何自动查找。
  • 让我们尝试在 application/core/MY_model 中放置一个类,然后像 abc_model 一样扩展您的模型 extend my_model 它会在 linux 中产生错误,而在窗口中会很好。
【解决方案3】:

这里的逻辑有错误。让我们尝试了解问题所在。

  1. 你需要了解什么是OOP(因为CodeIgniter是基于 它)
  2. 您需要了解 CodeIgniter 的架构是如何工作的(加载 并使用数据库类,例如)
  3. 最后,你需要重写你的代码。

前两步我帮不了你,但最后,在你的第三步,你不会

  1. 在 CodeIgniter 的控制器中使用 include() 函数
  2. 尝试使用$this 作为$this-&gt;db-&gt;insert() 的参数
  3. 在类定义之外为__construct() 定义变量
  4. 尝试echo Class 之外的任何东西,从 CI_Controller 扩展

你会

  1. 使用多数据库配置
  2. 使用 CI 的模型进行 DB wrap
  3. 像 $this->load->model() 一样简单地加载您的模型

亲爱的 Tanya Branagan,我知道,这不是您等待的答案,但是您尝试使用该框架却没有尝试了解它是如何工作的。请耐心等待并至少阅读CI's ControllersCI's ModelsCI's Database Configuration

【讨论】:

  • 我意识到我不明白,这就是我寻求帮助的原因。很多代码取自我正在使用的在线课程中的模板,例如以 $this 作为参数的 $this->db->insert()。这些课程并没有完全解释这些原则。例如,他们没有任何关于如何实现数据库的说明,除了将它添加到我已经完成的 database.php 之外。而且我在 C# 中很好地使用 OOP,CodeIgniter 是唯一给我带来麻烦的东西。
  • @TanyaBranagan 好的。所以.. $this-&gt; - 是指向当前对象的指针(在 PHP 中,不仅在 CI 中)。 $this-&gt;db-&gt;insert($table,$data) 函数至少需要 2 个参数:第一个是 MySQL 表的字符串,第二个是包含要插入数据的数组,其中 key 是表的列名。您不需要包含任何内容,因为 CI 使用 $this-&gt;load-&gt; 构造来正确加载任何内容。此外,由于封装,您将无法在__constructor() 中使用您的$host$username 等。封装在大多数语言中都是一样的。
  • @TanyaBranagan 尝试阅读 codeigniter.com/userguide3/tutorial/index.html 以开始使用 CI,我认为这是最清晰的解释 CI 的工作原理。现在您的问题不是关于具体问题,而是关于“如何使用 CI?”的一般问题。你可以在网上找到很多教程,但我建议你从 CI 的手册开始,它们真的很好。祝你有美好的一天!
  • 我之前用 CodeIgniter 制作了几页,它们工作得很好,即使将它们用作参考我也无法让它工作,我不明白为什么,这是为什么我要寻求帮助。不过我会通过教程。
  • 另外,我在上一个项目的控制器构造函数中使用了 $host 等,并且它有效。我的大学课程也告诉我们这样做。
猜你喜欢
  • 2014-02-21
  • 2014-03-24
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 2015-04-29
  • 2013-11-04
  • 2013-02-18
相关资源
最近更新 更多