CI模型访问 - >当以小写字母指定模型名称时,无法找到您指定的模型

时间:2015-10-04 05:58:01

标签: php codeigniter model

每次控制器尝试访问家庭模型时,都会显示

Unable to locate the model you have specified: HomeModel

错误。

控制器访问视图没有问题。

在我将模型名称更改为小写后,它能够访问模型类。有人可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

参考Correct naming structure for CodeIgnitor

<强>网址

您的网址通常应为全小写字母。如果您希望使用大写字母,那么您可能会意外地排除小写字母,即使它们是相同的网址。示例:www.example.com/controller/method/param

<强>控制器

控制器类名称应全部小写,但第一个字母除外。

如果您的网址是www.example.com/gallery,则控制器名称为图库。 如果您的网址是www.example.com/admin_folder,则控制器名称为Admin_folder。 控制器文件名应与类名匹配,但全部为小写。

Gallery :: gallery.php Admin_folder :: admin_folder.php 控制器方法也应该全部小写。大写有一些灵活性,但与URL类似,有机会可以解决问题(这里是大写字母干扰表单验证回调方法的例子)。

<强>模型

模型遵循大多数与控制器相同的约定。唯一的区别是模型方法名称,它可以使用您的首选大小。由于这些方法与URL无关,并且使用普通的PHP OOP调用,因此您可以根据需要为其命名。

建议使用全小写版本加载模型。虽然CI不需要它,但如果用一个大写字母加载它会使一些用户感到困惑,但是然后尝试以全小写形式访问它(这是因为本机PHP对类属性[和一般的变量]区分大小写) ,而不是CodeIgniter)。

  • 模型类名:Users_model(_model后缀也不是必需的,但有些人可能会将其用作个人偏好,或者防止与用户控制器发生命名冲突)。

  • 模型文件名:users_model.php

  • 模型加载:$ this-&gt; load-&gt; model(&#39; users_model&#39;)

  • 模型方法名称(一切正常):$ this-&gt; users-&gt; getAll(),$ this-&gt; users-&gt; find_by_name($ name)等。

<强>库

除文件名外,库遵循相同的约定。在他们的例子中,文件名应该与类名匹配。

与模型类似,建议使用小写名称加载库。

这些规则与CI的库(位于应用程序/核心和应用程序/库,以及自定义或第三方库)相同。

特别说明:扩展默认CI库时,application / config.php中定义的前缀开始起作用。此前缀通常应全部为大写,后跟下划线。默认为MY _。

图书馆类名:照片 库文件名:Photos.php, 图书馆加载:$ this-&gt;加载 - &gt;图书馆(&#39;照片&#39;) 助手

帮助程序名称和加载都是小写的。文件名由辅助名称组成,后面附加了_helper。

助手名称:网址 帮助文件名:url_helper.php 帮手负载:$ this-&gt; load-&gt; helper(&#39; url&#39;) 备注

CodeIgniter的命名约定有些不一致,但实际上并没有太多的规则,所以它们很容易习惯和记忆。我很少在CI中命名和加载时遇到问题,当我这样做时,通常是因为我只是在与Composer相关的项目上工作,所以我养成了不同的习惯。

在撰写本文时,本答案中的规则适用于CodeIgniter 2.1.x.关于Github for 3.0的讨论会更好,并为命名约定增加更多的一致性,如果你愿意,你可以阅读和贡献。

答案 1 :(得分:1)

在codeigniter上创建模型时

类和文件名应该有第一个字母作为大写,这也适用于控制器和库等。

Home_model.php

class Home_model extends CI_Model {
   public function __construct() {
     parent::__construct();
   }

   public function some_function() {

   }
}

如何仅在控制器示例上加载模型

class Welcome extends CI_Controller {
   public function __construct() {
     parent::__construct();
     $this->load->model('home_model');
     // Or In a subfolder application / models / subfoldername
     $this->load->model('subfoldername/home_model');
   }

   public function index() {
     $data['results'] = $this->home_model->some_function();
     $this->load->view('welcome_message', $data)
   }

}