标题：cakephp
简介
CakePHP是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名设计模式的快速开发框架。该项目主要目标是提供一个可以让各种层次的PHP开发人员快速地开发出健壮的Web应用，而 又不失灵活性。[1]
CakePHP是一个基于PHP，免费且开源的迅速发展框架最开始从Ruby On Rails框架里得到灵感。
它提供程序员所需要的基本体系架构，因此程序员可以使用它更快速且不失灵活性地创建网络应用程序。而这就是我们创造 CakePHP 的首要目的。
  CakePHP LOGO大家对网络开发那千篇一律的步骤或许感到厌烦了。CakePHP 因此提供了开发一个网络程序时所需要的所有工具，您这时只需要编写程序里的详细逻辑就可以了。那每当您要开始一个新的程序的时候，您只需要把 CakePHP 给拷贝一份，接着就可以迅速地开始开发您的程序了。
CakePHP 拥有一个活跃的开发团队以及社区，使 CakePHP 本身更具备应有的价值。另外，使用 CakePHP 也意味着您的应用程序将更容易地测试以及更容易地被改良、更新。
特性
CakePHP有多个特点，这些特点让CakePHP成为了快速开发框架中的佼佼者之一。
1.拥有既友好又活跃的社区
2.灵活的MIT许可证
3.兼容PHP4和PHP5 (2.x版本已不兼容PHP4)
4.数据库交互运用了CRUD（create, read, update and delete），即增查改删。
5.应用程序Scaffolding（脚手架）
6.代码自动产生（代码产生器）
7.MVC体系架构
8.清晰，干净的高度自定义的URLs和路由请求分发器（Request dispatcher）
9.内置验证机制（validation）
10.快速灵活的模板机制 （PHP 语法,利用Helpers）
11.拥有AJAX, JavaScript, HTML表单和更多的视图助手工具
12.邮件、Cookie、安全、会话（Session），和请求处理的组件
13.灵活的ACL访问控制机制
14.数据的清理（Data Sanitization）
15.灵活的视图缓存（Flexible View Caching）
16.可在任何子目录里工作，很少甚至不需要更改任何 Apache相关配置
17.本地化
基本原则
CakePHP 框架提供了强大的基础来建立你的应用。它可以处理每个细节，从用户的不同请求，到网页的最终渲染。由于框架符合 MVC 设计模式思想，所以可以轻松地定制和扩展你的应用。
该框架也提供了一个基本的组织结构，从文件名到数据库表名，使你的整个应用保持一致性和逻辑性。这个概念虽简单但非常强大。遵守规则，会使你确切地知道东西在哪儿和它们怎么组织的。CakePHP的结构控制器 (Controller)，模型 (Model) 及视图 (View) 是 CakePHP 的特色，除此之外它也包含了一些附加的类和对象，使得在 MVC 设计模式下开发更快更有乐趣。组件 (Component)、行为 (Behavior) 及助手 (Helper)，提供了可扩展性及可重用性来快速新增功能到你的应用中。现在，我们将站在较高的层级上，接着开始寻找一些关于如何使用这些工具的细节。一次典型的CakePHP请求  图2. 典型的Cake请求我们已经看过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的命名规则从许多开发者多年的经验及一些惯例筛选出来。尽管我们建议你开发时使用命名规则，我们应该提及大部份这些规则简单又直观，特别是在修改旧有系统时较为轻松容易。
MVC
MVC的定义CakePHP遵循MVC软件开发模式。 程序开发设计使用MVC分开你的应用程序为三个主要的部分:
1.模型（Model）：就是封装数据和所有基于对这些数据的操作
2.视图（View）：就是封装的是对数据显示，即用户界面
3.控制器（Control）：就是封装外界作用于模型的操作和对数据流向的控制等，简单来说就是负责处理和分发客户的请求
图示 1显示了一个在CakePHP中的大概的MVC请求范例。举例说明，假设一个名叫"Ricardo"的客户刚刚点击了一个“现在购买一个客户自定义的Cake!”的链接在你的应用程序页面。
  图示11.Ricardo 点击一个链接指向 URL, 并且他的浏览器向你的web server发送了一个请求。
2.接着这个分发器检查 URL请求，并且协助这个请求指到正确的控制器。
3.这个控制器就会执行特定的应用程序逻辑。例如，他将检查看Ricardo是否已经登陆。
4.这个控制器也使用模式去获得应用程序数据层的数据。模式通常展现数据库表，但是他们同时也展现（呈现） LDAP（轻量级目录访问协议）入口 entries, RSSfeeds, 或者系统文件。在这个范例中， 这个控制器使用了一个模式（model）从数据库中去抓取、撷取Ricardo的最近的订单。
5.一旦控制器已经开始魔法似的处理那些数据，他支配了那些数据成为一个视图。 视图的得到这个数据并且让它为展现给客户准备好。 在CakePHP视图通常是使用HTML格式， 但是一个视图应该能够很容易的成为一个 PDF, XML 文档, 或者 JSON 对象依赖于你的需求。
6.一旦视图从控制器中获得数据就会呈现一个完成的编译好的视图给大家，那个视图的内容将会被返回到Ricardo的浏览器。
差不多每次请求你的应用程序都将遵循这个基本原则。稍后我们将会增加一些关于CakePHP这方面的细节，所以当我们继续下去时请谨记此点。为何使用MVC？为什么要用 MVC模式 呢? 因为它是一个经过考验的真正的软件设计模型，它可以使程序成为可维护的、模块化的和快速开发的包。使用分离的模型(Model)、视图(View)和控制器(Controller)组织的程序是轻便的。新的特性很容易就被加入，旧的程序换上新的外观也是一下子的功夫。模块化和分离的设计使得开发者和设计者能够同时工作，这包括了快速原型的能力。分离的设计令开发者可以修改应用的一部分而不会影响到其他部分。
如果你从来没有用过这种方法建立应用，适应它需要一些努力，但是我们相信一旦你使用CakePHP建立了你的第一个应用，你不会再想用其他方法建立你的应用了。
开发
必要条件1.HTTP Server. 最好是带 mod_rewrite模块的 Apache , 但不是必要条件.
2.PHP 4.3.2 或更高版本, 没错, CakePHP 可以在php4 或是5下面运行.
技术上来说, 数据库不是必需的,但我们设想每个应用都会用到数据库,cakephp 支持大部分数据库::
1.MySQL
2.PostgreSQL
3.Firebird DB2
4.Microsoft SQL Server
5.Oracle
6.SQLite
7.ODBC
8.ADOdb准备安装CakePHP运行很快并且很容易安装。最小的安装环境就需要一个服务器和一份Cakephp的拷贝就行了。很简单的。然而这份文档主要对如何在apache服务器下进行安装进行说明，（因为apache是当前最流行的服务器）。你可以配置cakephp让它在LightHTTPD 或者 Microsoft IIS 服务器下运行。
1.下载一份CakePHP
2.配置你的服务器让它支持php（如果必要的话）
3.检查文件权限安装安装CakePHP可以简单到直接把它丢入你网页伺服机的主目录中, 也可以复杂并如你希望般的弹性. 在这部分我们将含括三种安装方式: 开发模式, 实际应用与高级安装.
1.开发模式: 简单又快速, URLs中将包含CakePHP的安装目录, 并不十分安全.
2.实际应用: 必须调试伺服机之主目录, 简洁的URLs, 非常安全.
3.高级安装: 通过一些调试, 能让你把CakePHP主程式放在指定的地方, 更可能让不同的CakePHP分享同样的CakePHP主程式.配置配置CakePHP应用程序是一件很有意思的事情。在你安装完CakePHP之后，创建一个基本的web应用程序只需要你配置一下数据库
然而，还有很多其他可选的配置用于适用CakePHP更高级的一些特性。你可以通过继承的方法为CakePHP核心增加功能、配置你自己的路由，或者定义你自己的映射。控制器(Controllers控制器是用来控制逻辑的。通常，控制器会来控制一个独立的模型。举例，如果你要建立一个在线的面包店，你要有 RecipesController 和 IngredientsController 这两个控制器来控制食谱 (Recipe) 和配料 (Ingredient)。在 CakePHP 会以复数的方式命名控制器。
RecipesController 控制 Recipe 模型，ProductsController 控制 Product 模型，依此类推。
一般我们所创建的控制类都继承 CakePHP 的 AppController 类。AppController 继承自 Controller 类AppController 在/app/app_controller.php 文件里定义，它包含很多函数，你的应用程序里面所有的控制器类都要共享这些函数。Appcontroller类的父类Controller类在 CakePHP 标准库中定义。
控制器里的函数通常都会跟 动作 (action)关联。Action 是用来显示视图 (View) 的控制器的函数。一个 action 就是控制器的一个单独的函数。
当一个URL请求匹配和控制器的动作匹配的时候，CakePHP的分发器调用相应的动作完成这个请求。组件(Components)组件是封装了一定逻辑处理的，可以在控制器间共享使用的包。当你发现你总是需要在不同的控制器间来回拷贝代码的时候，也许就是时候把这些可以共有的代码打个包，写成组件了。
CakePHP也提供了很多很好用的内置组件：
Security、Sessions、Access control lists、Emails、Cookies、Authentication、Request handling模型(Models)模型是数据的表现，在CakePHP中被用来进行数据的访问。通常情况下一个模型对应一张数据库表，不过也可以用来访问其他的数据容器，比如文件，LDAP记录，iCal事件或者CSV文件的行。
一个模型可以与其他的模型建立相互的关系。比如，一张食谱可能会有一位作者作为其要素之一。行为(Behaviors)模块的行为是一种用来组织CakePHP模块里定义的某些功能的方法.它使我们可以把那些不是与模块直接相关但又需要的逻辑独立出来。通过提供一种简单但强大的方法来扩展模块，行为(Behaviors)允许我们通过简单地定义一个类变量来加入方法。这就是行为(Behaviors)如何允许模块去掉所有额外的体重,比如可能不是他们正在建模的商业合同的一部分,或是另一个模块才需要的并且可以被推测出来的部分。
举个例子，比如一个模块，它允许我们取得数据库里用来存关于树的信息结构数据。在一个树里删除、新增和迁移结点并不像删除、插入和修改表中的一行数据那样简单。很多个记录可能需要被更新随着结点的移动。相比在每个模块中建立这些树操作的方法，我们可以简单地告诉模块去使用TreeBehavior，或者更正式地来说，我们告诉我们的模块，让它们像一个树一样来行为。这就是所谓的追加一个行为到模块。只需要用一行代码，我们的CakePHP模块就获得了一整套的方法，从而使它可以根据它的结构来互相操作。数据源数据源是连接模型和其所代表的数据之间的桥梁。多数情况下，数据被存储在像MySQL，PostgreSQL，或者MSSQL等关系数据库中。CakePHP本身集成了大部分的既有数据库的特定数据源(参考cake/libs/model/datasources/dbo/中的dbo_*等类库文件 ), 为了方便把这些数据源在此做个简单的列表:
1.dbo_mssql.php
2.dbo_mysql.php
3.dbo_mysqli.php
4.dbo_oracle.php
5.dbo_postgres.php
6.dbo_sqlite.php视图(View)CakePHP的视图层是展现给用户看到的部分。多数情况下视图应该是供浏览器使用的(X)HTML文档，但也可能是提供给Flash组件的AMF数据，或者通过SOAP响应服务器端应用程序，甚至发送给用户的CSV文件。
CakePHP视图使用PHP文本编写，默认扩展名.ctp (意为CakePHP Template)。这些文件涵盖了从控制器接收数据并按指定格式呈现给用户的所有表现逻辑。
视图文件存放在/app/views/目录下，在以控制器名称命名的文件夹中，以正访问的action名称命名的文件。例如，Products控制器中有一个"view()" action， 那么与之对应的视图文件应该就是/app/views/products/view.ctp。助手(Helper)助手(Helper) 是类似组件的类，用于你的应用程序的表现层里。它们包括了一些视图(view)，元素(element)或布局(layout)共用的表现层逻辑。脚手架(Scaffolding)应用程序脚手架是一种允许开发人员快速定义和创建查、删、改、新程序（CRUD）的技术。CakePHP的脚手架还允许开发人员定义对象之间如何相互联合，以及创建和取消它们之间的关联。
创建脚手架所需要的全部只不过是一个model以及它的控制器。只要在控制器中设置了$scaffold变量，基本上就搞定了。
CakePHP的脚手架那是相当的酷。它可以让你在几分钟之内创建一个基本的CRUD程序出来。如此之酷你可能会将其用于产品环境中去。尽管我们也认为它很酷，但请你一定要认识到脚手架嘛。。。嗯。。。始终只是个脚手架。它拥有一个大致的结构，这样可以让你在项目初期能够快速起步。这并不意味着它很灵活，而是说它只是起步时的一个临时途径。当你发现需要自定义逻辑和视图的时候，也就是该拆除脚手架开始写代码的时候了。CakePHP的Bake控制台，在下一节我们会讲到，是非常重要的下一步：它能够生成多数当前脚手架功能相同的代码。
脚手架在WEB程序早期的时候是一个不错的选择。数据库设计初期会经常改动，在设计过程早期这是相当正常的现象。但有个负面作用：WEB开发人员讨厌创建了表单但却看不到实际的应用。为了减轻开发人员的压力，CakePHP已经内置了脚手架。脚手架分析数据表，并且创建标准的带添加、删除和编辑按钮的列表，编辑用的标准表单以及检视数据库单条记录的视图。插件(Plugins)CakePHP允许将创建的控制器、模型和视图联合起来打包发布，作为其它CakePHP程序可以使用的插件。在应用程序中有比较棒的用户管理模块？或者简单的博客？抑或web services模块？将它打包成插件就可以在其它程序中使用了。
插件与安装它的应用程序之间最主要的联系是应用程序的配置（如数据库连接等等）。否则，它只会对它自己的领空生效，就像一个独立的应用程序一样。
核心组件
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.
应用程序
CakePHP有一定数量的盒子外面的控制台应用程序。有些应用程序是用来连接其它CakePHP功能的(比如ACL或i18n), 另外的则是一般的用途，它们被用来使你的开发启动更快。