CakePHP 约定

我们坚信,约定优于配置(convention over configuration)。虽然学习 CakePHP 的约定需要一些时间,但从长远来看,您可以节省时间。通过遵循约定,您可以获得免费的功能,并将您从维护跟踪配置文件的噩梦中解放出来。约定也会带来非常统一的开发体验,可以允许其他开发者参与进来并提供帮助。

控制器约定

控制器的类名是复数,首字母大写, 并且以 Controller 结尾。UsersController 和 ArticleCategoriesController 都是约定的控制器类名的例子。

控制器中 public 的方法通常被暴露为可通过web浏览器访问的“操作”。例如 /users/view 映射到 UsersController 中的 view() 方法。protected 或者 private 的方法不能通过路由访问。

控制器名称的URL注意事项

正如您刚刚所见,单个单词的控制器映射到一个简单的小写URL路径。例如 UsersController (将是定义在名称为 UsersController.php 的文件中)可以从 http://example.com/users 访问。

虽然你也可以以任何你喜欢的方式来定义多个单词的控制器的路由,但约定的URL路径是小写并且用 DashedRoute 类来分割。因此,/article-categories/view-all 是访问 ArticleCategoriesController::viewAll() 方法的正确方式。

当你使用 $this->Html->link() 创建连接的时候,你可以使用以下约定的url数组:

$this->Html->link('link-title', ['prefix' => 'MyPrefix' // 首字母大写'plugin' => 'MyPlugin', // 首字母大写'controller' => 'ControllerName', // 首字母大写'action' => 'actionName' // 驼峰式
]

有关 CakePHP URL 和参数处理的更多信息,见 Connecting Routes。

文件名和类名约定

通常地,文件名匹配类名,并遵循 PSR-4 标准以便进行自动加载。下面是类名和文件名的一些示例:

  • 控制器类 LatestArticlesController 将对应文件名 LatestArticlesController.php
  • 组件类 MyHandyComponent 将对应文件名 MyHandyComponent.php
  • Table 类 OptionValuesTable 将对应文件名 OptionValuesTable.php.
  • Entity 类 OptionValue 将对应文件名 OptionValue.php.
  • Behavior 类 EspeciallyFunkableBehavior 将对应文件名 EspeciallyFunkableBehavior.php
  • 视图类 SuperSimpleView 将对应文件名 SuperSimpleView.php
  • Helper 类 BestEverHelper 将对应文件名 BestEverHelper.php

每个文件将放置于你的应用程序的适当的 folder/namespace 文件夹中。

数据库约定

与 CakePHP 模型对应的表名是复数并用下划线分隔的。例如, usersarticle_categories, 和 user_favorite_pages 等。

带有两个单词的字段名使用下划线分隔: first_name

hasMany, belongsTo/hasOne 关系中的外键被自动识别为关联表的表名(单数形式)后面带上``_id``。因此,假设 Users hasMany Articles,那么 articles 表将使用 user_id 字段作为外键关联到 users 表。 像 article_categories 这种表名中包含多个单词的表,外键的格式是 article_category_id

当使用模型之间的 BelongsToMany 关系时,连接表应该以被连的表名作为表名(否则 bake 命令将无法运作),并且按字母顺序排序(使用 articles_tags 而非 tags_articles)。如果你需要在连接表上添加额外的列,您应该为该表创建一个单独的 entity/table 类。

除了使用自增长的 integer 作为主键外,你还可以使用 UUID 字段。当你使用 Table::save() 方法保存新的记录的时候,CakePHP 会自动使用 (Cake\Utility\Text::uuid()) 生成 UUID 值。

模型约定

Table 类名是复数、首字母大写、以 Table 结尾的。UsersTableArticleCategoriesTableUserFavoritePagesTable 分别是对应 usersarticle_categoriesuser_favorite_pages 表的 table 类名。

Entity 类名是单数、首字母大写、无后缀的。UserArticleCategoryUserFavoritePage 分别是对应 usersarticle_categoriesuser_favorite_pages 表的 entity 类名。

视图约定

视图模板文件使用它对应的控制器方法的名字以下划线形式命名。ArticlesController 类的 viewAll() 防范将会对应视图模板文件 src/Template/Articles/view_all.ctp

基本模式就是:src/Template/Controller/underscored_function_name.ctp

CakePHP 默认使用英语的词形变化。如果你的数据库表名或字段名使用别的语言,你需要新增词形变化规则(从单数到复数,反之亦然)。你可以使用 Cake\Utility\Inflector 来定义你的自定义词形变化规则。更多信息见文档 Inflector。

概述

通过使用 CakePHP 约定来命名应用程序的各个部分,你无须烦恼于配置和维护的麻烦就可以轻松使用。下面是一个将约定整合在一起的例子:

  • 数据库表:"articles"
  • Table 类:ArticlesTable,在文件 src/Model/Table/ArticlesTable.php 中
  • Entity 类:Article,在文件 src/Model/Entity/Article.php 中
  • 控制器类:ArticlesController,在文件 src/Controller/ArticlesController.php 中
  • 视图模板,在文件 src/Template/Articles/index.ctp 中

使用这些约定,CakePHP 知道 http://example.com/articles/ 的请求映射到 ArticlesController(Articles 模型自动可用并被绑定到数据库的 articles 表)的 index() 方法,然后呈现给一个文件。除了通过创建无论如何需要创建的类和文件之外,这些关系都不是通过任何方式配置的。

CAKEPHP 约定相关推荐

  1. CakePHP 2.x CookBook 中文版 第三章 入门(三)

    为什么80%的码农都做不了架构师?>>>    路由 多数情况下,CakePHP 的默认路由都能够很好地工作.对用户体验和搜索引擎兼容敏感的程序员将注意到 CakePHP 的 URL ...

  2. CakePHP系列(一)----CakePHP3.4一览

    一.CakePHP一览 CakePHP旨在使常见的Web开发任务简单,容易. 通过提供一个一体化工具箱,您可以开始使用CakePHP的各个部分一起或单独工作. 本概述的目标是介绍CakePHP中的一般 ...

  3. CAKEPHP 快速入门

    快速入门¶ 实战是学习以及体验 CakePHP 的最好途径. 让我们以开发一个内容管理系统(CMS)为例,来学习 CakePHP. 內容管理系統教程 此教程将讲述如何建立一个简单的 CMS. 首先我们 ...

  4. CakePHP快速入门

    快速入门 CakePHP的框架为您的应用程序提供了一个强大的基础.它可以处理每一个环节,从用户的初始请求一路到网页的最终渲染. 而且,由于该框架采用MVC的框构,它可以让你轻松定制和扩展你的应用程序. ...

  5. CakePHP 2.x CookBook 中文版 第七章 模型 之 关联:将模型连接在一起

    关联:将模型连接在一起 CakePHP 的一个非常强劲的特性就是由模型提供关系映射,通过关联来管理多个模型间的连接. 在应用程序的不同对象间定义关系是很自然的.例如:在食谱数据库,一个食谱可能有多个评 ...

  6. CakePHP 2.x CookBook 中文版 第五章 控制器 之 组件

    为什么80%的码农都做不了架构师?>>>    组件 组件是在多个控制器中共享的逻辑包.如果你发现自己想要在控制器间复制粘贴某些东西时,你就应该考虑将一些功能包装在一个组件中了. C ...

  7. cakephp 1.3 配置CakePHP

    Section 1 数据库配置 app/config/database.php 这个文件包含了所有的数据库配置.新安装的Cake是没有datebase.php这个文件的,你需要从database.ph ...

  8. CakePHP 2.x十分钟博客教程

    1. CakePHP2十分钟博客教程(一):安装与配置 Cakephp 2.0依然保持着Cakephp框架的各种优良传统,其中之一就是非常易于新手入门,几乎不做任何复杂的配置即可使用.非常可惜的是,C ...

  9. CakePHP:链接地址问题(不用mod_rewrite,IIS)

    实现的友好的urls,固然很好,但是有些场合因为服务器的原因等,我们无法使用重写规则,特别是当我们用CakePHP开发应用产品的时候,必须 考虑到用户不同的部署环境,所以必须考虑到不用urls重写,网 ...

最新文章

  1. 中文转换成阿拉伯数字
  2. 设计原则--开放-封闭原则(OCP)
  3. 3说明书_知行翻译:做化妆品说明书翻译时,这3点需要谨记
  4. spring boot web项目_阿里技术专家带你使用Spring框架快速搭建Web工程项目
  5. Windows平台下go编译器LiteIDE的安装和使用
  6. java获取当前年月
  7. optimize 回收表空间的一些说明
  8. 在Winform中屏蔽UnityWebPlayer的右键以及自带Logo解决方案整理
  9. edius裁剪快捷键_Edius剪辑视频的两种方法
  10. 未来的人工智能和 AR/VR 会从哪些方面影响教育?有什么机会?
  11. cdr添加节点快捷键_cdr快捷键大全_cdr教程【图文】
  12. 民生银行计算机研发笔试题,民生银行提前批 “民芯计划” 技术岗笔试算法题...
  13. 面向对象:寻寻觅觅,诚邀你一起来解开这道迷题
  14. 纯css实现各种箭头图片效果
  15. 关于数字IC设计中分频后的慢速时钟和以快时钟触发的信号的关系处理
  16. 安装docker-ce报错
  17. iptables的三表五链
  18. php memcache内存大小,PHP memcache 内存缓存 数据库查询 应用 高洛峰 细说PHP
  19. 一个200左右的数字 四个四个的数多一 六个六个的数少一 七个七个的数多六 问此数为多少。。。
  20. 炒汇常识--股市与汇市的区别

热门文章

  1. amtisy带你暴炒基金Action-Three:聊聊如何选基金
  2. 新能源汽车产业深度研究报告:从2.0迈入3.0时代(113页)
  3. ncode控件使用总结
  4. 学会iframe并用其解决跨域问题
  5. Webface--(CASIA-WebFace)
  6. CASIA-Webface数据集
  7. CourseMaker和CamtasiaStudio谁更能打造精彩微课
  8. android--相机开发
  9. 华为服务器怎么查看cpu型号,华为RH2288H V2处理器性能测试_华为 FusionServer RH2288 V2_服务器评测与技术-中关村在线...
  10. iOS热更新、热修复方案