模型似乎未加载-命名问题

时间:2019-07-01 17:38:44

标签: php codeigniter

在从Codeigniter 2.2升级到3.1的过程中,我们重命名了所有模型。现在除非我用其他名称重新制作它们,否则它们不会加载。

查看其他许多文章,常见的问题是无法在名称中加载模型或拼写错误。我没有看到这两种情况。有几个模型都存在此问题,但是我发现一个不理想的修复方法是使用新名称创建新模型。第一个示例是一个名为PrpmsModel的模型,我可以在该文件中获取所有内容,并创建一个名为FooModel.php的新模型,只需将文件中的类名称也更改为FooModel,然后在我加载它并进行调用时就可以使用。

<?php
/**
 * PRPMS - Model
**/
if (! defined('BASEPATH'))
    exit('No direct script access allowed');

class PrpmsModel extends MY_Model
{

我拿出了尾端,但只是为了看清顶部的定义。

$this->load->model('PrpmsModel');
$employee = $this->PrpmsModel->fetchPRPMSbyEmployeeId(1, 1);

以上操作无效。

<?php
/**
 * Foo - Model
**/
if (! defined('BASEPATH'))
    exit('No direct script access allowed');

class FooModel extends MY_Model
{

将所有PrpmsModel.php复制到FooModel.php

$this->load->model('FooModel');
$employee = $this->FooModel->fetchPRPMSbyEmployeeId(1, 1);

以上内容确实有效。 该模型以前是prpmsModel,所以我只是更改了大小写。文件名也进行了更改,以匹配PrpmsModel大小写。

1 个答案:

答案 0 :(得分:0)

在CI 2.x和CI 3.x之间更改了命名约定,并在{x3>} 2.x-> 3.0迁移指南中概述了这些约定{p3}

要特别注意模型,请记住在CI 3中:

  • 文件名应始终仅以大写字母大写(sales_model.php不好,SALES_MODEL.phpSales_Model.php都不行。Sales_model.php可以)
  • 模型的类名必须与文件名匹配(使用上一个示例,您的类声明应为Class Sales_model extends CI_Model { }
  • 应使用全小写的名称将模型加载到控制器中(这样$this->load->model('sales_model');是可以的,而$this->load->model('Sales_model');$this->load->model('Sales_Model');$this->load->model('SALES_MODEL');则不是)

确保已迁移的代码库中的所有内容均符合上述约定,并且应该没问题。如果没有,则需要更多代码(以及错误/调试日志)来帮助您进行调试。

由于您已经在阅读2.x-> 3.0迁移指南,因此请花一些时间阅读整个文档。从2.x到3.x的变化很大,因此确保一切都符合3.x标准肯定不会受到损害