种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

cakephp

(2019-07-20 09:05:17) 百科综合
cakephp

cakephp

CakePHP是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等着名设计模式的快速开发框架。该项目主要目标是提供一个可以让各种层次的PHP开发人员快速地开发出健壮的Web套用,而 又不失灵活性。

CakePHP是一个基于PHP,免费且开源的迅速发展框架最开始从Ruby On Rails框架里得到灵感。

它提供程式设计师所需要的基本体系架构,因此程式设计师可以使用它更快速且不失灵活性地创建网路应用程式。而这就是我们创造 CakePHP 的首要目的。

大家对网路开发那千篇一律的步骤或许感到厌烦了。CakePHP 因此提供了开发一个网路程式时所需要的所有工具,您这时只需要编写程式里的详细逻辑就可以了。那每当您要开始一个新的程式的时候,您只需要把 CakePHP 给拷贝一份,接着就可以迅速地开始开发您的程式了。

CakePHP 拥有一个活跃的开发团队以及社区,使 CakePHP 本身更具备应有的价值。另外,使用 CakePHP 也意味着您的应用程式将更容易地测试以及更容易地被改良、更新。

基本介绍

  • 中文名:CakePHP
  • 特点:多个
  • 拥有:既友好又活跃的社区
  • 应用程式:Scaffolding(脚手架)
  • 运用:诸如ActiveRecord快速开发框架

特性

  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 LOGOCakePHP LOGO

基本原则

CakePHP 框架提供了强大的基础来建立你的套用。它可以处理每个细节,从用户的不同请求,到网页的最终渲染。由于框架符合 MVC 设计模式思想,所以可以轻鬆地定製和扩展你的套用。
该框架也提供了一个基本的组织结构,从档案名称到资料库表名,使你的整个套用保持一致性和逻辑性。这个概念虽简单但非常强大。遵守规则,会使你确切地知道东西在哪儿和它们怎幺组织的。
CakePHP的结构
控制器 (Controller),模型 (Model) 及视图 (View) 是 CakePHP 的特色,除此之外它也包含了一些附加的类和对象,使得在 MVC 设计模式下开发更快更有乐趣。组件 (Component)、行为 (Behavior) 及助手 (Helper),提供了可扩展性及可重用性来快速新增功能到你的套用中。现在,我们将站在较高的层级上,接着开始寻找一些关于如何使用这些工具的细节。
一次典型的CakePHP请求
我们已经看过CakePHP的基本成分了,那幺现在就来看看各个对象怎幺完成一个基本的请求。继续讲我们之前的请求的例子,想像一下我们的朋友Ricardo刚刚在一个CakePHP的套用的首页上点击了“立刻买一个自定义的蛋糕!”这个连结。
图2. 典型的Cake请求图2. 典型的Cake请求
黑色 = 请求的元素, 灰色 = 可选的元素, 蓝色 = 回调方法
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!”的连结在你的应用程式页面。
1.Ricardo 点击一个连结指向 URL, 并且他的浏览器向你的web server传送了一个请求。
图示1图示1
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), 另外的则是一般的用途,它们被用来使你的开发启动更快。

标 签

搜索
随机推荐

Powered By 种豆资源网||