CakePHP简介

CakePHP是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名设计模式的快速开发框架。该项目主要目标是提供一个可以让各种层次的PHP开发人员快速地开发出健壮的Web应用,而 又不失灵活性。
CakePHP是一个基于PHP,免费且开源的迅速发展框架最开始从Ruby On Rails框架里得到灵感。
它提供程序员所需要的基本体系架构,因此程序员可以使用它更快速且不失灵活性地创建网络应用程序。而这就是我们创造 CakePHP 的首要目的。
大家对网络开发那千篇一律的步骤或许感到厌烦了。CakePHP 因此提供了开发一个网络程序时所需要的所有工具,您这时只需要编写程序里的详细逻辑就可以了。那每当您要开始一个新的程序的时候,您只需要把 CakePHP 给拷贝一份,接着就可以迅速地开始开发您的程序了。
CakePHP 拥有一个活跃的开发团队以及社区,使 CakePHP 本身更具备应有的价值。另外,使用 CakePHP 也意味着您的应用程序将更容易地测试以及更容易地被改良、更新。
官方网站:https://cakephp.org/

CakePHP特性

1、CakePHP有多个特点,这些特点让CakePHP成为了快速开发框架中的佼佼者之一。
2、拥有既友好又活跃的社区
3、灵活的MIT许可证
4、兼容PHP4和PHP5(2.x版本已不兼容PHP4)
5、数据库交互运用了CRUD(create, read, update and delete),即增查改删。
6、应用程序Scaffolding(脚手架)
7、代码自动产生(代码产生器)
8、MVC体系架构
9、清晰,干净的高度自定义的URLs和路由请求分发器(Request dispatcher)
10、内置验证机制(validation)
11、快速灵活的模板机制 (PHP 语法,利用Helpers)
12、拥有AJAX, JavaScript, HTML表单和更多的视图助手工具
13、邮件、Cookie、安全、会话(Session),和请求处理的组件
14、灵活的acl访问控制机制
15、数据的清理(Data Sanitization)
16、灵活的视图缓存(Flexible View Caching)
17、可在任何子目录里工作,很少甚至不需要更改任何Apache相关配置
18、本地化

基本原则

CakePHP 框架提供了强大的基础来建立你的应用。它可以处理每个细节,从用户的不同请求,到网页的最终渲染。由于框架符合 MVC 设计模式思想,所以可以轻松地定制和扩展你的应用。
该框架也提供了一个基本的组织结构,从文件名到数据库表名,使你的整个应用保持一致性和逻辑性。这个概念虽简单但非常强大。遵守规则,会使你确切地知道东西在哪儿和它们怎么组织的。
CakePHP的结构
控制器 (Controller),模型 (Model) 及视图 (View) 是 CakePHP 的特色,除此之外它也包含了一些附加的类和对象,使得在 MVC 设计模式下开发更快更有乐趣。组件 (Component)、行为 (Behavior) 及助手 (Helper),提供了可扩展性及可重用性来快速新增功能到你的应用中。我们将站在较高的层级上,接着开始寻找一些关于如何使用这些工具的细节。
一次典型的CakePHP请求:

我们已经看过CakePHP的基本成分了,那么就来看看各个对象怎么完成一个基本的请求。继续讲我们之前的请求的例子,想象一下我们的朋友Ricardo刚刚在一个CakePHP的应用的首页上点击了“立刻买一个自定义的蛋糕!”这个链接。
黑色 = 请求的元素, 灰色 = 可选的元素, 蓝色 = 回调方法
1.Ricardo 点击了指向一个URL 的链接, 然后他的浏览器对你的服务器发出了一个请求。
2.路由(route)从URL中解释并提取出这次请求的参数: 控制器(controller), 动作(action)以及其他在这次请求中影响到业务逻辑的所有其他参数。
3.使用路由后,请求的URL被映射到一个控制器的动作中(在特定的一个控制器的类的一个方法)。在这个例子,是CakeController类的buy()方法。在控制器的所有动作逻辑执行之前会调用beforeFilter()回调方法(callback)。
4.控制器可能会使用模型来处理应用的数据。在这个例子里,控制器使用了一个模型从数据里得到Ricardo上次买的东西。在这次操作中所有这个模型适用的回调方法、习惯(behavior)和数据源(DataSource)都可能得到实施。即使模型没有被用到,所有的CakePHP控制器的初始化至少都需要一个模型。
5.当模型取得数据后,数据会被返回到控制器。模型的回调方法可能会被实施。
6.控制器可能使用组件对数据进行进一步的加工,或者进行其他的操作(例如会话处理、验证或者发电子邮件)。
7.一旦控制器使用了模型和组件以有效地准备数据,就可以使用控制器的set()方法把数据传送到视图(view)。在数据送到视图前,控制器的回调方法可能会被实施。视图逻辑会被执行,可能包括了各种元素及(或者)帮助方法。默认情况下,视图会在一个布局(layout)里被渲染。
8.附加的控制器回调方法(像afterFilter)可能被实施。最后,完整的经过渲染的视图代码就被送到Ricardo的浏览器了。
CakePHP 文档结构
在你下载并且解压缩之后,在CakePHP目录下会看到这样一些文件和目录:
1. app
2. cake(较高的cakephp版本是lib/Cake)
3. vendors
4. .htaccess
5. index.php
6. README
其中有三个主要的目录:
1.app目录,将是你施展魔术之处——放置你应用程序的地方。
2.cake目录,是CakePHP的核心代码,请不要随意修改这里边的代码,除非你确信自己有这个能力。
3.vendors目录,是放置第三方PHP库的地方。如果在开发过程中还引入一些除CakePHP之外的库,最好放在这个目录下,便于代码的管理。
config 拥有一些CakePHP使用的设定。资料库连结的详细资料、启动组态、核心设定档案及许多应该被储存在这里的档案。
controllers 包含你的应用程式控制器及它们的组件。
locale 储存用来国际化的字元档案。
models 包含你的应用程式模型、行为和资料来源。
plugins 包含插件包裹。
tmp 这是用来储存CakePHP暂存资料的。实际上储存的资料是看你如何设定CakePHP,但这个资料夹通常用来储存模型描述、记录档和会谈资讯。
vendors 所有的第三方类别或函式库应该被放置在这个资料夹。可以简单的以App::import('vendor', 'name')使用它们。也许你会觉得多馀或困惑于此处有vendors而上一层目录内也有vendors资料夹,这其中的差异是当我们讨论到管理多应用程式和较为复杂的系统设定时,可以使用不同的配置。
views 展示层的档案被放置在此处:元素、错误页面、小帮手、布局和视图档案。
webroot 在产品安装模式下,这个资料夹应该是应用程式的根目录。包含了样式表、影像和JavaScript档案可放置的资料夹。

CakePHP命名规则:
我们是命名规则的拥护者。虽然需要花费一点时间来学习CakePHP的命名规则,你省下更多时间在开发上:根据以下的命名规则,你得到不需花钱的功能,以及你将自己从搜寻设定档维护的恶梦中释放出来。命名规则达成一致的系统开发,允许其它的开发者较容易加入或是提供协助
CakePHP的命名规则从许多开发者多年的经验及一些惯例筛选出来。尽管我们建议你开发时使用命名规则,我们应该提及大部份这些规则简单又直观,特别是在修改旧有系统时较为轻松容易。

核心组件

CakePHP 有大量的内置组件 (component)。它们可以直接使用在你的应用程序中。
Acl Acl 访问控制列表组件提供一个简单易用的数据库接口和基于ini文件的访问控制列表。
Auth Auth 认证组件提供了一个简单易用的认证系统,使用多种认证过程,如 Controller 回调、ACL 或者Object 回调。
Session 会话组件是 PHP Session 的独立存储的包装器。
RequestHandler RequestHandler 组件分析访问者的请求,和给应用提供关于内容类型 (Content Type) 和被请求的信息。
Security 安全组件允许你做非常严格的安全设置和管理HTTP验证。
Email 使用多种邮件传输代理发送邮件,包括使用 PHP 的 mail() 和 SMTP。
Cookie Cookie 组件类似 SessionComponent,可以理解为 PHP Cookie 的一个包装器。

核心行为

ACL Acl行为提供一种将模型与ACL系统无缝的结合方法。 它能透明地创建ARO或者ACO
Containable 使用 Containable 可以减少无谓的数据库检索,从而增加应用的响应速度和整体性能。也会使搜索和过滤数据的过程变得清晰和一致。
Tree 在数据表中以层次结构存储数据是相当普遍的。例如这些数据可能是拥有无限级子目录的目录数据,多层目录相关数据,或者是层次结构的文字展现(如ACL逻辑中的访问控制对象(ACO))。

核心助手

Helpers就像表现层的Component类。它包含了表现层的逻辑,可以供其他views,elements或者layouts调用。
这部分描述了CakePHP自带的每一个helepers,如Form, Html, JavaScript and RSS等
AJAX AjaxHelper 使用 Prototype ,用来提供 Ajax 操作和前端效果。 使用 AjaxHelper 之前, 你必须下载它们的 JavaScript 库,并放到 /app/webroot/js/ 下。 除此之外, 你需要在使用 AjaxHelper 功能的任何 layouts 和 views 文件中引入它们。
Form FormHelper是CakePHP一个新的附加功能。表单创建的大部分粗重工作都由这个新类来完成,取代(不推荐使用)HtmlHelper中的方法。FormHelper主要聚焦于快速创建表单, 流程化的数据校验,页面的重复构造和布局。FormHelper同样也很灵活-它几乎可以自动的完成所有事情,但你也可以指定方法完成你所需要的功能。
HTML HTML Helper是Cake用来使开发变得迅速且不会乏味的一个好方法。HTML Helper有两个主要的目的:帮助插入那些经常用到的HTML代码,帮助更快更方便的创建一个Form。
Javascript Javascript helper旨在帮助开发人员输出良好格式的JS相关tag和数据。
Number Number helper中包含了一些非常出色的函数,可以帮助你格式化数值型数据。
Paginator 分页Helper用来输出分页控件,如页码、下一页/上一页之类的链接。
Text Text helper提供了一些格式化文本数据的函数。
Time Time helper提供了一些函数供程序员输出诸如Unix时间戳格式或者是更加易读的日期字符串。
所有的函数都能够接受合法的PHP日期字符串或者是Unix时间戳格式的参数。

工具库

CakePHP 包含普通用途的工具库,它们可以在你的应用程序的任何地方被访问,比如Set和HttpSocket.