【php精品源码栏目提醒】:本文主要为网学会员提供“CakePHP框架最全中文文档 - 其它资料”,希望对需要CakePHP框架最全中文文档 - 其它资料网友有所帮助,学习一下!
一 CakePHP 的基本原则A. CakePHP 的结构 控制器 Controller,模型 Model 及视图 View 是 CakePHP 的特色,除此之外它也包含了一些附加的类和对象,使得在 MVC 设计模式下开发更快更有乐趣。
组件Component、行为 Behavior 及助手 Helper,提供了可扩展性及可重用性来快速新增功能到你的应用中。
现在,我们将站在较高的层级上,接着开始寻找一些关于如何使用这些工具的细节。
a 控制器扩展——组件Component 组件 Component 是一个帮助简化控制器逻辑的类。
如果你有一些想要在控制器或应用程序之间共享使用的逻辑,那么组件通常是很适合的。
比如,框架核心提供的 EmailComponent组件使得创建及发送 email 成为一个轻松的工作。
所以并不是在一个控制器内编写发送email 的方法,而是包装这样的逻辑以便在整个应用中被其他控制器共享使用。
控制器也同样配有回调函数Callback。
当你需要在 CakePHP 核心操作之间插入一些逻辑时,可利用这些回调函数。
可利用的回调函数包括: beforeFilter 在所有的控制器动作逻辑开始之前执行 beforeRender 在控制器动作逻辑之后执行,但在视图输出之前 afterFilter 在所有的控制器动作逻辑之后执行,包括视图输出。
也许在 afterRender 与 afterFilter 之间没有什么不同,除非你手动在你的控制器动作 之中呼叫 render 及此后的包含一些逻辑操作。
b 视图扩展——助手Helper 助手 Helper 是用来辅助视图逻辑的类。
与组件在控制器中的使用非常类似,助手允许在多个视图中存取及共享显示逻辑。
其中一个核心助手是,AjaxHelper,它使得在视图中请求Ajax 变得十分简单 大多数的应用程序都会有许多重复使用的视图代码片段。
CakePHP 使用布局 layout 及元素 elements 使得重用视图代码更为容易。
预设的情况下,每个被控制器渲染的视图都出现在一个布局内。
元素被使用在当小片段代码的内容需要被重用在多个视图的时候。
c 模型扩展——行为Behavior 同样的,行为 Behavior 是用来在模型之间加入共享功能。
举例来说,如果你将用户资料储存在树结构中,你可以具体指定你的 User 模型使用像树结构的行为,并获得在你的树结构中自由操作移除、新增和搬移节点的功能 模型 Model 也支持另一个叫做 DataSource 的类。
DataSource 是一个让模型以一致的方式操作不同类别数据的抽象层。
虽然在 CakePHP 应用中主要的数据来源通常是数据库,但你也可以编写附加的 DataSource 来使模型表达 RSS feeds、CSV 文件、LDAP 目录数据 或iCal 事件。
DataSources 允许你从不同的数据来源来操作记录,而不只限制在使用 SQL 语句。
DataSources 也允许你通过 LDAP 模型关联到许多 iCal 事件。
就像控制器一样,模型也有使用回调函数的特性: beforeFind afterFind beforeValidate beforeSave afterSave beforeDelete afterDelete透过这些回调函数的名称,就应该可以了解它们的作用。
你可以在讲述模型的章节找到更详细的信息。
d 应用扩展 ApplicationExtensions 控制器 Controller、助手 Helper、模型 Model 都有各自的父类,你可以用来定义应用层次的更改。
AppController 控制器父类,位置 /app/app_controller.phpAppHelper 助手父类,位置 /app/app_helper.
php 以及 AppModel 模型父类,位置/app/app_model.
php,都是放置你想要在整个应用中所公用控制器、助手或模型功能的好地方。
路由 Route,尽管不是类或文件,但它在 CakePHP 中扮演请求回应的角色。
路由定义CakePHP 如何对映 URL 与控制器动作之间的关系。
默认的路由行为将quot/controller/action/var1/var2quot 对映至 Controller::actionvar1 var2,但是你可以使用路由来自定 URL 以及它们如何对应你的应用。
一些在应用中的功能是值得整个打包的。
插件 Plugin 是一个实现了特定功能的程序包,包含了模型、控制器和视图,并可以延申到多个应用之中。
用户管理系统或简单的 blog 也许是一个相当适合的 CakePHP 插件B. 一次典型的 CakePHP 请求 我们已经看过 CakePHP 的基本成分了,那么现在就来看看各个对象怎么完成一个基本的请求。
继续讲我们之前的请求的例子,想象一下我们的朋友 Ricardo 刚刚在一个 CakePHP 的应用的首页上点击了“立刻买一个自定义的蛋糕”这个链接。
图 2. 典型的 Cake 请求。
黑色 请求的元素 灰色 可选的元素 了;蓝色 回调方法 1. Ricardo 点击了指向 http://www.example.com/cakes/buy 的链接 然后他的浏览器 对你的服务器发出了一个请求。
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 的浏览器了。
C. CakePHP 档案结构 让我们来看看 CakePHP 的盒子里是用什么组成的。
你知道 CakePHP 看起来像是从基本 MVC组成的,但你也同样需要知道它档案是如何组织的。
app cake docs index.
php vendors 当你下载了 CakePHP,你将看到四个主要的资料夹。
app 资料夹将是你施展你的魔术之处:这是你放置你应用程序的地方。
cake 资料夹是我们施展我们魔法的地方,请不要修改这个资料夹里的所有档案,如果你修改而导致魔法失效,我们将无法帮助你除错。
docs 资料夹放置了典型的读我、版本更新记录及授权资料档案。
最后,vendors 资料夹是可以放置需要使用在你应用程序的第三方
PHP 函数库a App 资料夹CakePHP 的 app 目录将是开发应用程序时最常使用的一个。
就让我们来更仔细的看 app 资料夹里面有些什么 拥有一些 CakePHP 使用的设定。
资料库连结的详细资料、启动组态、核心设定档 config 案及许多应该被储存在这里的档案。
controllers 包含你的应用程控器及它们的组件。
locale 储存用来国际化的字符档案。
models 包含你的应用程序模型、行为和资料来源。
plugins 包含插件包裹。
这是用来储存 CakePHP 暂存资料的。
实际上储存的资料是看你如何设定 CakePHP, tmp 但这个资料夹通常用来储存模型描述、记录档和会谈资讯。
所有的第三方类别或函数库应该被放置在这个资料夹。
可以简单的以 App::import‘vendor’ ‘name’使用它们。
也许你会觉得多馀或困惑于此 vendors 处有 vendors 而上一层目录内也有 vendors 资料夹,这其中的差异是当我们讨论 到管理多应用程序和较为复杂的系统设定时,可以使用不同的配置。
views 展示层的档案被放置在此处:元素、错误页面、小帮手、布局和视图档案。
webroot 在产品安装模式下,这个资料夹应该是应用程序的根目录。
包含了样式表、影像 和 JavaScript 档案可放置的资料夹。
D. CakePHP 命名规则 我们是命名规则的拥护者。
虽然需要花费一点时间来学习 CakePHP 的命名规则,你省下更多时间在开发上:根据以下的命名规则,你得到不需花钱的功能,以及你将自己从搜寻设定档维护的恶梦中释放出来。
命名规则达成一致的系统开发,允许其它的开发者较容易加入或是提供协助 CakePHP 的命名规则从许多开发者多年的经验及一些惯例筛选出来。
尽管我们建议你开发时使用命名规则,我们应该提及大部份这些规则简单又直观,特别是在修改旧有系统时较为轻松容易a 档案及类别名称命名规则 一般来说,文件名是由下划线将单词分开,但是类名通常使用驼峰命名法。
举例来说,类KissesAndHugsController 的文件名会是 kisses_and_hugs_controller.
php。
然而文件名不一定都以这样的规则来命名。
例如:类 EmailComponent 的文件名是email.
php,而类 HtmlHelper 的文件名会是 html.
php。
b 模型及资料库命名规则 模型类别名称是单数且使用骆驼命名法。
Person、BigPerson、和 ReallyBigPerson 都是模型命名规则的例子。
资料表名称对应到 CakePHP 模型是复数且以下划线分隔单字。
资料表名称 people、big_people 和 really_big_people会各自与上述的模型对应。
外键在 hasMany、belongsTo 或 hasOne 关系中随着相关模型在之后加上_id 是被认可的。
所以如果一个糕点师有许多饼干,饼干这个资料表透过 baker_id 外键将参考到糕点师这个资料表。
结合资料表,使用 hasAndBelongsToMany HABTM关系在模型之间的命名方式必需依照字母先后次序是 apples_zebras 而不是 zebras_apples 所有资料表与 CakePHP 模型互动除了 join 资料表需要有一个主键使每一列单一识别。
如果你希望使用无单一识别主键的资料表,像是你的 posts_tags 结合资料表,CakePHP 的命名规则就是加在资料表名称的单一主键。
CakePHP 不支援复合主键。
在这情况下你要直接操作你的结合资料表资料,这代表你需要使用直接查询呼叫或是增加主键来使用一般的模型。
例如: CREATE TABLE posts_tags id INT10 NOT NULL AUTO_INCREMENT post_id INT10 NOT NULL tag_id INT10 NOT NULL PRIMARY KEYid c 控制器命名规则 控制器的类别名称是复数,使用骆驼命名法,并在最后加上 Controller 。
PeopleController 和 LatestArticlesController ,都是控制器命名规则的例子。
你写一个控制器的第一个函数可能是 index函数。
当一个请求是控制器而非动作的时候, 预设的 CakePHP 行为是去执行控制器内的 index函数。
例如一个 http://www.example.com/apples/ 请求将映像至 ApplesController 叫用 index函数,而 http://www.example.com/apples/view/ 会映像至 ApplesController 叫用 view函数。
您也可以由加上下划线在控制器的函数名称前来变更控制器能见度。
如果一控制器的函数 已加上下划线,函数将不可直接从网站上取存,但是可以供内部使用。
例如: ltphp class NewsController extends AppController function latest this-gt_findNewArticles function _findNewArticles //Logic to find latest news articles gt 页面 http://www.example.com/news/latest/ 可被一般使用者存取,有人想尝试存取 http://www.example.com/news/_findNewArticles/ 页面将会得到错误讯息,因为这个函数已 经被使用下划线保护了。
1. 关于控制器的地址的命名考虑 正如你所见,单个字母命名的控制器可以很容易的映射到一个简单的小写字母的地址上。
. 例如 ApplesController 被定义成文件名为’apples_controller.
php’ 被 http://example.com/apples 访问。
多个单词命名的控制器 can 的任何 ‘inflected(使词曲折变化)’如下的表示形式: /redApples /RedApples /Red_apples /red_apples 都能访问到 RedApples controller 的 index方法. 不管怎样 按照命名规则的约定,你的 url 应该由小写字母和下划线组成 因此/red_apples/go_pick 是正确命名格式去访问RedApplesController::go_pick action.d 视图文件的命名习惯 控制器函数运行后,将显示以特定形式命名的视图文件。
例如:在 PeopleController 中getPeady 函数将调用对应的视图文件 /app/views/people/get_ready.ctp。
基本范例: /app/views/controller/underscored_function_name.ctp。
使用 CakePHP 的这些约定来命名你的应用程序,可以使你的函数没有争议和结构维护不受局限。
下面最后一个例子是关系约定: 数据库表: quotpeoplequot 模型类: quotPersonquot,创建 /app/models/person.
php 控制器类: quotPeopleControllerquot,创建 /app/controllers/people_controller.
php 视图文件, 创建 /app/views/people/index.ctp 使用这些约定,CakPHP 就知道 http://example.com/people/ 这个请求需要去调用PeopleController 中的 index函数,Person 的数据模型是自动有效的(自动与数据库中的‘people’表关联),并将其渲染到对应的视图文件。
没有一个关联是已经被配置的,你可以根据自己的需要来创建。
现在你已经了解到了 CakePHP 的基本原则 你可以尝试运行 CakePHP Blog Tutorial 理解它们是如何结合在一起的。
二 使用 CakePHP 进行开发A. 必要条件 HTTP Server. 最好是带 mod_rewrite 模块的 Apache 但不是必要条件.
PHP 4.3.2 或更高版本 没错 CakePHP 可以在
php4 或是 5 下面运行.技术上来说 数据库不是必需的但我们设想每个应用都会用到数据库cakephp 支持大部分数据库:: MySQL 4 or greater PostgreSQL Firebird DB2 Microsoft SQL Server Oracle SQLite ODBC ADOdbB. 准备安装 CakePHP 运行很快并且很容易安装。
最小的安装环境就需要一个服务器和一份 Cakephp 的拷贝就行了。
很简单的。
然而这份文档主要对如何在 apache 服务器下进行安装进行说明,(因 。
为 apache 是当前最流行的服务器) 你可以配置 cakephp 让它在 LightHTTPD 或者 MicrosoftIIS 服务器下运行。
安装的准备工作主要有以下几步: 下载一份 CakePHP 配置你的服务器让它支持
php,(如果必要的话) 检查文件权限a 获取 CakePHP 目前获取 CakePHP 的副本主要有两种途径。
你可以到官方网站上下载副本的压缩文件包zip/tar.gz/tar.bz2,或者通过 SVN 获取
源码。
下载最新发布的 CakePHP 版本. 访问官方主站 http://www.cakephp.org 点击 quotDownloadNowquot 链接. 所有最近发布的 CakePHP 都位于 CakeForge。
在 CakeForge 中也包含有其它 CakePHP 项目的链接, 有关于 CakePHP 的插件和应用程序. CakePHP 中可用的http://cakeforge.org/projects/cakephp. 另外每天构建的版本包括 bug 的修复和最新的嗯当天改进. 这些可被使用的下载索引:http://cakephp.org/downloads/index/nightly。
真正的即时更新 你可以到位于开发分支的 svn
源码库上获取: https://svn.cakephp.org/repo/branches/1.2.x.x.b 权限 CakePHP 使用/app/tmp 目录以实现不同的操作。
模型描述 缓存视图和会话信息。
像这样 确保/app/tmp 目录在 Web 服务器上为可以写入的权限。
C. 安装 安装 CakePHP 可以简单到直接把它丢入你网页伺服机的主目录中 也可以复杂并如你希望般的弹性. 在这部分我们将含括三种安装方式: 开发模式 实际应用与高级安装. 开发模式: 简单又快速 URLs 中将包含 CakePHP 的安装目录 并不十分安全. 实际应用: 必须调试伺服机之主目录 简洁的 URLs 非常安全. 高级安装: 通过一些调试 能让你把 CakePHP 主程序放在指定的地方 更可能让不同 的 CakePHP 分享同样的 CakePHP 主程序.a 开发 将 CakePHP 安装在你的网页伺服机的主目录中. 比如你的伺服机的主目录是/var/www/html 在开发模式中目录排法如下: /var/www/html o /cake_1_2 /app /cake /docs /index.
php /vendors在你的浏览器中输入 http://www.example.com/cake_1_2/ 你将能够看到 CakePHP.b 实际应用 实际应用安装 需要有在 web 服务器中更改站点根目录的权限。
这也表明整个域名将作为单一 CakePHP 应用运行。
实际应用安装使用如下步骤: /path_to_cake_install/ o /app /webroot 此路径需要在 WEB 服务器中设置为站点根路径 o /cake o /docs o /index.
php o /vendors若您使用的是 Apache,则 Apache 配置文件中本站点的 DocumentRoot 指令可能和下面类似:DocumentRoot /path_to_cake_install/app/webroot 1. DocumentRoot /path_to_cake_install/app/webroot要访问 CakePHP 以浏览器访问 http://www.example.com 即可.c 高级安装 或许你想把与 CakePHP 相关的目录放在文件系统的其它位置。
或许是因为虚拟主机的原因,或者可能是你有几个应用程序想要共享一个 Cake 函数库。
这部分将讲述怎样在文件系统里扩展你的 CakePHP 目录。
首先,了解有关 Cake 应用程序的三个主要部分: 1. CakePHP 核心函数库 在 /cake. 2. 你的应用程序 在 /app. 3. 应用程序的根目录 通常 /app/webroot. 每个目录都可以被放到文件系统的任何位置,webroot 目录除外,它在 Web 服务器下必须保持可用性。
你也可以将 webroot 文件夹放到你想放置的地方,但你必须保证 Cake 能够识别它。
配置你的 Cake 安装,你需要在/app/webroot/index.
php 做一些修改。
有三个常量需要你亲自编辑: ROOT APP_DIR 和 CAKE_CORE_INCLUDE_PATH。
ROOT 应该设置为包含你应该程序文件夹的目录。
APP_DIR 应该被设置为应用程序文件夹的基址(basename) 。
CAKE_CORE_INCLUDE_PATH 应该设置为 CakePHP 函数库的路径。
让我们来做一个示例,这样你可以从实际中看到高级安装是怎样进行的。
想象我正想要CakePHP 这样工作: CakePHP 核心函数库位于 /usr/lib/cake. 我的应用程序根目录(application’swebroot) 是 /var/www/mysite/. 我的应用程序(application’sapp )贮藏文件夹是 /home/me/mysite. 给定这种类型的安装,我应该去编辑 webroot/index.
php 文件( /var/www/mysite/index.
php 中最后的部分 在本示例当中)如下所示:// /app/webroot/index.
php partial comments removedif defined‘ROOT’ define‘ROOT’ DS.’home’.DS.’me’ if defined‘APP_DIR’ define ‘APP_DIR’ ‘mysite’ if defined‘CAKE_CORE_INCLUDE_PATH’ define‘CAKE_CORE_INCLUDE_PATH’ DS.’usr’.DS.’lib’.DS 推荐使用 DS 常量来定义路径,而不使用斜线“/”来定义路径。
这样可以防止由于使用分 隔符而导致文件丢失错误,同时这样还可以让你的代码更轻便。
1. 附加类的路径(AdditionalClassPaths) 在同一样系统中它可以用来使 MVC 类能够在应用程序问共享,如果你想让两个应用程序共 一个控制器,你可以使用 CakePHP 的 bootstrap.
php 来将附加的类带到视图中。
在 bootstrap.
php 中 定义某些特定的变量名来使 CakePHP 知道如何寻找其它 MVC 类的位置: viewPaths array controllerPaths array modelPaths array helperPaths array c.