CodeIgniter PHP模型访问“;无法找到您指定的型号";

CodeIgniter PHP模型访问“;无法找到您指定的型号";,php,model,codeigniter-2,Php,Model,Codeigniter 2,我一直在尝试加载我正在建设的网站的一些模型。但是,由于未知原因,它将导致以下错误: An Error Was Encountered Unable to locate the model you have specified: logon_model 现在,我已经完成了我的研究。问题是IC处理的文件名是小写的。但是,我的文件和文件调用都是小写的,如下所示: echo "VALIDATING"; // Validation passed. Off we go to ac

我一直在尝试加载我正在建设的网站的一些模型。但是,由于未知原因,它将导致以下错误:

An Error Was Encountered

Unable to locate the model you have specified: logon_model
现在,我已经完成了我的研究。问题是IC处理的文件名是小写的。但是,我的文件和文件调用都是小写的,如下所示:

echo "VALIDATING";
            // Validation passed. Off we go to account info verification from AA's database. God help us all.
            $this->load->model('logon_model');
            echo "FOUND MODEL";
            $res = $this->logon_model->verify_user($this->input->post('username'),$this->input->post('password'));
            echo $this->input->post('username');
            echo $this->input->post('password');
执行未到达“找到的模型”,因此在模型加载时停止。我尝试使用:

 $this->load->model(site_url('logon_model'));
没有结果。需要说明模型文件是否正确放置在正确的模型文件夹中

我怎样才能解决这个问题

编辑:模型文件的标题:

class Logon_model extends CI_Model {

....

以下是模型的外观:确保您的模型是这样的

    <?php
    class Logon_model extends CI_Model {

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

    function myFunc()
    {
      // do something
    }
}

注意所有小写。

模型的命名和调用必须使用模型名称的第一个字母大写,其余字母小写

例如:
$this->load->model('Logon_model')

以及:


但是文件名是正确的。

创建模型时,需要将文件放在
application/models/
中,并用所有小写字母命名文件,如
logon\u model.php

logon\u model.php
应包含以下内容:

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


class Logon_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
    }
    ...
如果以上所有内容都符合预期,我将开始查看文件权限和/或符号链接(如果您正在使用任何符号链接)。

在CodeIgniter 3.0-dev(从github获取)中,这不起作用,因为CI是以大写字母搜索的

您可以在system/core/Loader.php第282行或下面找到代码:

$model = ucfirst(strtolower($model));

foreach ($this->_ci_model_paths as $mod_path)
{
    if ( ! file_exists($mod_path.'models/'.$path.$model.'.php'))
    {
        continue;
    }

    require_once($mod_path.'models/'.$path.$model.'.php');

    $CI->$name = new $model();
    $this->_ci_models[] = $name;
    return $this;
}

这意味着我们需要在application/models/Logon_mode.php上创建具有以下名称的文件。我使用codeigniter 3+。我有同样的问题,在我的情况下,我改变了模型文件名从Upper案件开始


Logon_model.php

我通过以下方式解决此问题:

  • 我重命名文件do Page_model.php
  • 页面“”模型扩展的类名
  • 我调用autoload:
    $autoload['model']=array('Page_model'=>'Page')

  • 很好。。我希望能得到帮助。

    除了@jakentus的答案,以下是对我有用的东西:

  • 将模型包中的文件名更改为
    Logon\u model.php
    (第一个字母大写@jakentus表示正确)

  • 将类名更改为与文件名相同的名称,即

    类登录\u模型扩展了CI\u模型

  • 将加载方法中的名称也更改为

    $this->load->model('Logon_model')


  • 希望这有帮助。快乐编码:)

    我也遇到了同样的问题,但我通过修改application/config/routes.php文件解决了这个问题

    我对我的控制器目录进行了一些重构,但忘记了在路由文件中执行它

    早些时候:

    $route['application/apply'] = 'ex/application/account/create';
    
    现在:


    $route['application/apply']='application/account/create'

    文件名和类名的第一个字母必须为大写

    你的模范班将是

    类登录\u模型扩展了CI\u模型

    并且文件名将是Logon\u model.php

    从您的控制面板访问它,就像

    $this->load->model('Logon_model')


    更改以大写字母开头的模型名称的名称会起作用。
    示例:Login_model.php而不是Login_model.php

    您必须更改模型名称的首字母大写。 在localhost中,小写字母可以正常工作,但在联机情况下不起作用。例如:

    common_model.php
    
    将其替换为

    Common_model.php
    

    再加上我的问题:

    $this->load->model("planning/plan_model.php");
    
    .php
    不应该在那里,所以应该是:

    $this->load->model("planning/plan_model");
    
    希望这有助于某人

    确保:

  • 首字母大写
  • 类名确切名称为文件名
  • 确保文件以.php扩展名结尾

  • 在我的例子中,我的1和2是正确的,但是忘记了用.php扩展名命名我的文件。我怎么忘记了,不知道,但这确实让我很难找出问题所在

    更改模型文件名,从大写字母开始,如下所示:Logon\u model.php

    当我们将项目从windows服务器迁移到LINUX服务器时会发生这种情况,因为LINUX区分大小写,而windows则不区分大小写


    因此,在windows上,即使不使用大写字母写文件名,它也可以正常工作,但在linux上不行。

    您可以给出任何您想要的名称

    样式指南是建议,而不是必须的

    但是您必须注意在任何地方使用相同的名称

    例如,对于Test_模型,您必须:

    类名 文件名 负荷模型 使用模型 为了避免使用硬编码字符串,您可以这样加载模型:

    public function index()
    {
    
        $this->load->model('logon_model');
        ...
    
    }
    
            $this->load->model(Test_Model::class);
    

    如果您在Linux上,那么请确保您的文件名必须与第一个参数中的加载模型方法中传递的字符串匹配

    $this->load->model('Order_Model','order_model');
    
    您可以使用第二个参数,使用它可以从模型中调用方法,它也可以在Linux和windows上工作

    $result = $this->order_model->get_order_details($orderID);
    

    我已经添加了标题,请检查它,它是logon\u模型而不是logon\u模型,对吗?否则,请参阅wclark的answer@Kai这是所有登录模型确保模型类和文件名相同,并且只有第一个字母必须是大写的,例如“模型用户”我已经像你说的那样编辑了它们,但仍然不起作用!您的模型具体位于哪个文件夹中?它应该是
    application/models/
    ,并且应该命名为
    logon\u model.php
    。如果上述所有条件都满足,您没有理由不能将其作为
    Logon\u model
    加载。所有内容都已正确放置,因此我也不理解。请将model重命名为Logon\u model.phpSame。我使用的是Codeigniter 3.0,我需要将模型文件夹中的文件命名为“test_model.php”到“test_model_php”。我想指出,只有在基于unix的系统(如linux和mac osx)上才需要大写字母。在windows上,以un小写字母开头可以正常工作。php文件名必须与类名匹配,并且类的第一个字符必须为uppercas
            Test_Model.php
    
            $this->load->model('Test_Model');
    
            $this->Test_Model
    
            $this->load->model(Test_Model::class);
    
    $this->load->model('Order_Model','order_model');
    
    $result = $this->order_model->get_order_details($orderID);