14

我正在开始我的第一个 CodeIgniter 项目,并希望在开始之前获得一些建议。我对控制器名称和模型的工作方式有点困惑。

如果我希望我公司页面的 url 是http://example.com/Company/view

控制器需要被称为 Company.php 对吗?在公司控制器内部,它看起来像这样:

public function viewAll()
{
    $this->load->model('Companymodel');
    $this->load->view('templates/header');
    $data['result'] = $this->Companymodel->viewAll();
    $this->load->view('company/viewAll', $data);
    $this->load->view('templates/footer');
}

好的,我在这里很困惑,在上面的第 4 行:

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

这个对公司模型页面的调用需要第一个字母大写,其余小写?

如果正确,模型文件是否需要称为 Companymodel.php 并放在 application/models 文件夹中?

调用控制器和模型相同是不好的做法吗

示例:Company.php 并将其放置在 /application/controller/ 中,然后将模型称为 Company.php 并将其放置在 application/model 中,或者应该将模型称为 Companymodel.php

我想我的最终问题是控制器和模型文件的命名约定,以及它们是否可以大写。

4

2 回答 2

48

网址

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

控制器

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

  • 如果您的 URL 是www.example.com/gallery,则控制器名称是Gallery
  • 如果您的 URL 是www.example.com/admin_folder,则控制器名称是Admin_folder

控制器文件名应与类名匹配,但全部小写。

  • 画廊 ::gallery.php
  • 管理员文件夹 ::admin_folder.php

控制器方法也应该全部小写。大写有一定的灵活性,但与 URL 类似,它也有可能搞砸一些事情(这是一个大写字母干扰表单验证回调方法的示例)。

楷模

模型遵循大多数与控制器相同的约定。唯一的区别在于模型方法名称,它可以使用您偏好的大小写。由于这些方法与 URL 无关,而是使用普通的 PHP OOP 调用,因此您可以随意命名它们。

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

  • 模型类名:(Users_model后缀_model也不是必须的,但有些人可能会使用它作为个人喜好,或者防止与Users控制器命名冲突)。
  • 模型文件名:users_model.php
  • 模型加载:$this->load->model('users_model')
  • 模型方法名称(一切正常):$this->users->getAll(),$this->users->find_by_name($name)等。

图书馆

文件名外,库遵循相同的约定。在他们的情况下,文件名应该与类名匹配。

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

这些规则对于 CI 的库(位于application/coreapplication/libraries,以及自定义或第三方库中)是相同的。

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

  • 库类名:Photos
  • 库文件名:Photos.php,
  • 库负载:$this->load->library('photos')

帮手

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

  • 帮手姓名:url
  • 帮助文件名:url_helper.php
  • 辅助负载:$this->load->helper('url')

笔记

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

在撰写本文时,此答案中的规则适用于 CodeIgniter 2.1.x。在 Github for 3.0 上进行了讨论,以更好地为命名约定添加更多一致性,如果您愿意,可以阅读并参与其中。

于 2013-06-06T22:02:21.600 回答
1

模型/admin.php

<?php

class Admin extends CI_Model {
...etc

controllers/company.php 将包含管理模型

function galleryView()
{
    $this->load->model('Admin');

    $numRows = $this->Admin->getPhotoNum();
... etc

要浏览到 galleryView,URL 将是 mysite.com/company/galleryView

CodeIgniter 网站上有很好的文档和示例

于 2013-06-06T19:53:46.710 回答