繁体   English   中英

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

[英]CI Model Access -> Unable to locate the model you have specified when model name is specified in lower case letters

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

Unable to locate the model you have specified: HomeModel

错误。

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

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

请参阅CodeIgnitor 的正确命名结构

网址

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

控制器

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

如果您的 URL 是 www.example.com/gallery,则控制器名称是 Gallery。 如果您的 URL 是 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->load->model('users_model')

  • 模型方法名称(都可以):$this->users->getAll()、$this->users->find_by_name($name) 等。

图书馆

除了文件名之外,库遵循相同的约定。 在这种情况下,文件名应该与类名匹配。

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

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

特别注意:在扩展默认 CI 库时,application/config.php 中定义的前缀会起作用。 此前缀通常应全部为大写,后跟下划线。 默认值为 MY_。

库类名:照片库文件名:Photos.php,库加载:$this->load->library('photos') Helpers

助手名称和加载都是小写的。 文件名由助手名称和 _helper 组成。

助手名称:url 助手文件名:url_helper.php 助手加载:$this->load->helper('url')

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

在撰写本文时,此答案中的规则适用于 CodeIgniter 2.1.x。 有关于 Github for 3.0 的讨论,以更好地为命名约定增加更多的一致性,如果您愿意,您可以阅读这些内容并做出贡献。

在 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)
   }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM