【问题标题】:Codeigniter: unable to locate the modelCodeigniter:无法定位模型
【发布时间】:2018-07-29 18:29:20
【问题描述】:

在我的 AWS ec2 实例上加载模型时遇到了一个非常有趣的问题。

AWS ec2 实例运行良好,可以像我的本地主机一样运行 php 5.6。

在本地主机上,模型工作得很好,我将文件上传到我的网页,它因以下错误而中断:

An uncaught Exception was encountered

Type: RuntimeException

Message: Unable to locate the model you have specified: Dashboard_model

Filename: /var/www/html/poe_dashboard/system/core/Loader.php

Line Number: 314

Backtrace:

File: /var/www/html/poe_dashboard/application/controllers/Dashboard.php
Line: 7
Function: __construct

File: /var/www/html/poe_dashboard/index.php
Line: 292
Function: require_once

对我来说这没有意义,因为如果它在本地工作,使用相同的 PHP 版本,那么现场会有什么问题?

根据 codeigniter 标准,类名和文件名都是正确的。

这里是链接:http://www.haddad.design/poe_dashboard/

如果我根本不选择加载我的模型而只是运行控制器来加载视图,它会正常加载。

有什么建议吗?

控制器:

class Dashboard extends CI_Controller {

function __construct() {
    parent::__construct();
    $this->load->model('dashboard_model');
}

文件名:

dashboard_model.php

型号:

class Dashboard_model extends CI_Model {

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

【问题讨论】:

  • 你的本地主机是窗口吗?如果是这样,Windows 不会像 Linux 那样强制区分大小写。 dashboard_model !== Dashboard_model 在 *nix 盒子上。另外,请尝试重命名文件以匹配类名。
  • 我在我的 windows 10 机器上运行它,那么我怎样才能让它在我的 aws 上运行呢?
  • 在 Windows 上,它不会抱怨大小写差异并会找到文件。在 Linux 上,dashboard_modelDashboard_model 完全不同。要使其正常工作,请使该字符串的所有实例完全相同,包括文件名。
  • 嗯,我尝试将模型类名称全部小写,就像我调用其他所有内容一样,但仍然没有成功。
  • 它们需要按照代码点火器标准 (ellislab.com/codeigniter/user-guide/general/models.html#anatomy) 命名。所以Dashboard_model 应该是全盘一致的称呼。

标签: php codeigniter amazon-web-services amazon-ec2


【解决方案1】:

在cmets中经过一番讨论,最终的答案是对load->model('dashboard_model')的调用必须将类名的首字母per the documentation大写。

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

它在 Windows 而不是 Linux 上工作的原因是因为 Windows 文件系统是not case sensitive(通常)。一般来说,当在 Windows 上进行本地开发并部署到 *nix 环境时,当它在本地而不是生产环境中工作时,您首先应该检查的事情是不正确的情况。

【讨论】:

    【解决方案2】:

    我目前在 Ubuntu 16.04 上使用 CodeIgniter 3。
    伙计们到处都用相同的名字。
    我的型号名称是Login_database

    例子:

    1. 在模型文件夹中

      class Login_database extends CI_Model
      {
      
      }
      
    2. 在控制器中加载模型时,这样做

      $this->load->model('Login_database');
      
    3. 在 config 文件夹的 Autoload 文件中,输入

      $autoload['model'] = array('Login_database');
      

    【讨论】:

      【解决方案3】:

      我通过这种方式完成的解决方案: 我之前打过电话

      $this->load->model('**Users_Model**');
      

      现在我在打电话

      $this->load->model('**users_model**');
      

      我还重命名了模型文件,例如: /projectname/codeigniter/application/models/Users_model.php 和代码

      defined('BASEPATH') OR exit('No direct script access allowed');
      
      class Users_model extends CI_Model{
          public function __construct(){
              $this->load->database();
          }
      }
      

      我又做了一个改动: 在调用我正在使用的模型函数时

      //sending to db model
      $result = $this->**Users_Model**->customQueryInsertUpdateGetId('**Users**',$data,$isdCode,$mobileNumber);
      

      现在我正在使用

      //sending to db model
      $result = $this->**users_model**->customQueryInsertUpdateGetId('**users**',$data,$isdCode,$mobileNumber);
      

      它解决了上述问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-06
        • 2016-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 2018-03-26
        相关资源
        最近更新 更多