没有合适的资源?快使用搜索试试~ 我知道了~
CakePHP框架最全中文文档.
需积分: 10 9 下载量 164 浏览量
2018-05-02
19:35:36
上传
评论 1
收藏 1.67MB PDF 举报
温馨提示
试读
402页
CakePHP框架最全中文文档.,介绍了PHP语言主要的框架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) 应用扩展 Application Extensions
控制器 (Controller)、助手 (Helper)、模型 (Model) 都有各自的父类,你可以用来定
义应用层次的更改。 AppController (控制器父类,位置 /app/app_controller.php),
AppHelper (助手父类,位置 /app/app_helper.php) 以及 AppModel (模型父类,位置
/app/app_model.php),都是放置你想要在整个应用中所公用控制器、助手或模型功能的好地
方。
路由 (Route),尽管不是类或文件,但它在 CakePHP 中扮演请求回应的角色。路由定义
CakePHP 如何对映 URL 与控制器动作之间的关系。默认的路由行为将
"/controller/action/var1/var2" 对映至 Controller::action($var1, $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 资料夹
里面有些什么
config
拥有一些 CakePHP 使用的设定。资料库连结的详细资料、启动组态、核心设定档
案及许多应该被储存在这里的档案。
controllers
包含你的应用程控器及它们的组件。
locale 储存用来国际化的字符档案。
models 包含你的应用程序模型、行为和资料来源。
plugins 包含插件包裹。
tmp
这是用来储存 CakePHP 暂存资料的。实际上储存的资料是看你如何设定 CakePHP,
但这个资料夹通常用来储存模型描述、记录档和会谈资讯。
vendors
所有的第三方类别或函数库应该被放置在这个资料夹。可以简单的以
App::import(‘vendor’, ‘name’)使用它们。也许你会觉得多馀或困惑于此
处有 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 不支援复合主键。在这情况下你要直接操作你的结合资料表资料,这代表你需要
使用直接查询呼叫或是增加主键来使用一般的模型。例如:
剩余401页未读,继续阅读
资源评论
sunbinhualong
- 粉丝: 2
- 资源: 33
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功