作者:王晓宁smile | 来源:互联网 | 2013-06-21 08:24
component(组件),controller公用的业务逻辑,比如说发邮件,可以调用EmailComponent来发送邮件,而不需要在单个的controller里面添加发邮件的代码。
1. CakePHP的基本结构
1.1 component(组件),controller公用的业务逻辑,比如说发邮件,可以调用EmailComponent来发送邮件,而不需要在单个的controller里面添加发邮件的代码。
1.2 Helper(助手类),与组件类似,主要用来帮助展示视图,比如用AjaxHelper来发Ajax请求,用HtmlHelper创建页面表单等。
1.3 Behavior(行为),是用来在模型之间加入共享功能。比如说系统使用LDAP来存储用户信息,那可以给user添加操作树形结构的behavior。CakePHP内置有Translate,Tree等行为。行为是通过模块类变量$actsAs来追加到模块里的。
1.4 路由 (Route),尽管不是类或文件,但它在 CakePHP 中扮演请求回应的角色。路由定义 CakePHP 如何对映 URL 与控制器动作之间的关系。默认的路由行为将 "/controller/action/var1/var2" 对映至 Controller::action($var1, $var2),但是你可以使用路由来自定 URL 以及它们如何对应你的应用。
2. CakePHP请求图
3. CakePHP目录结构
在你下载并且解压缩之后,在CakePHP目录下会看到这样一些文件和目录:
app
cake
vendors
.htaccess
index.php
README
你可以看到有三个主要的目录:
app目录将是你施展你的魔术之处:这是你放置你应用程式的地方。
cake资料夹是CakePHP核心模块,一般不要修改这个资料夹里的所有档案。
vendors资料夹是可以放置需要使用在你应用程式的第三方PHP函式库
CakePHP的app目录将是开发应用程式时最常使用的一个。就让我们来更仔细的看app资料夹里面有些什么
config
|
拥有一些CakePHP使用的设定。资料库连结的详细资料、启动组态、核心设定档案及许多应该被储存在这里的档案。
|
controllers
|
包含你的应用程式控制器及它们的组件。
|
locale
|
储存用来国际化的字元档案。
|
models
|
包含你的应用程式模型、行为和资料来源。
|
plugins
|
包含插件包裹。
|
tmp
|
这是用来储存CakePHP暂存资料的。实际上储存的资料是看你如何设定CakePHP,但这个资料夹通常用来储存模型描述、记录档和会谈资讯。
|
vendors
|
所有的第三方类别或函式库应该被放置在这个资料夹。可以简单的以App::import('vendor', 'name')使用它们。也许你会觉得多馀或困惑于此处有vendors而上一层目录内也有vendors资料夹,这其中的差异是当我们讨论到管理多应用程式和较为复杂的系统设定时,可以使用不同的配置。
|
views
|
展示层的档案被放置在此处:元素、错误页面、小帮手、布局和视图档案。
|
webroot
|
在产品安装模式下,这个资料夹应该是应用程式的根目录。包含了样式表、影像和Javascript档案可放置的资料夹。
|
4. 文件及类命名规则(重要)
4.1 数据库表名为复数,所有的表必须有一个名为id的字段,并且id字段为主键(CakePHP识别数据更新还是插入依赖此ID,还有表之间的关联也依赖此ID)。外键在hasMany、belongsTo或hasOne关系中随着相关模型在之后加上_id是被认可的。所以如果一个糕点师有许多饼乾,饼乾这个数据表透过baker_id外键将参考到糕点师这个数据表。多个字母的表名使用下划线分割并加上id。如category_type_id 是category_types的外键。结合数据表,使用hasAndBelongsToMany (HABTM)关系在模型之间的命名方式必需依照字母先后次序(是apples_zebras而不是zebras_apples). CakePHP是不支持复合主键的,需要添加一个额外的id作为单一主键。
4.2 所有的model文件到放在app/models目录下面。并且文件名为数据表名的单数形式,注意文件名全是小写,如果有多个用下划线分割。类名也是单数,且类名首字母大写,如果多个则按照驼峰式命名。所有的models必须继承AppModel或者其子类。AppModel继承自Model,在Model类中定义了数据操作。在Model中一般会定义一个name的变量,其值为类名。这不是必须的,CakePHP会自动配置,不过手动添加会比较好,在应用的时候会比较明确。
4.3 所有的controller文件到放在app/controllers目录下面。并且文件名为数据表加下划线加controller,注意文件名全是小写,如果有多个用下划线分割。类名为表名加上Controller,且类名首字母大写,如果多个则按照驼峰式命名。所有的controller必须继承Controller或者其子类。和Model一样,在Controller中一般会定义一个name的变量,其值为表名。这不是必须的,CakePHP会自动配置,不过手动添加会比较好。Model名字是单数,controller名字是复数,不难理解,一个controller对应的是很多model。如果一个controller类名加了下划线则其之类内部使用,不能通过URL来访问。 对于多个字母的controller,最后用下划线分割的小写url来访问。如/red_apples/go_pick是正确命名格式去访问RedApplesController::go_pick action
4.4 所有的view都放在app/views目录下面,一个controller对应一个文件夹,文件夹的名字和控制器名字一样,只是不加controller,换句话说和数据表名字一样。如果有名字有多个单词,要用下划线来分隔。在此文件夹下面有controller中action对应的文件,文件名和action一致,文件后缀为ctp,即cake template pages. 如果页面没有对应的action,只需要创建ctp文件并放在app/views/pages下面。 如果没有指定路由,CakePHP会把app/views/pages/home.ctp作为默认页面。对于多个字母的action,则使用下划线分割。如PeopleController 中 getPeady() 函数将调用对应的视图文件 /app/views/people/get_ready.ctp
4.5 文件及类名称命名规则
一般来说,文件名是由下划线将单词分开,但是类名通常使用驼峰命名法。如下面例子。
控制器类KissesAndHugsController会被命名为 kisses_and_hugs_controller.php (注意文件名中的_controller)
组件类MyHandyComponent会被命名为 my_handy.php
模型类OptionValue会被命名为 option_value.php
行为类EspeciallyFunkableBehavior会被命名为 especially_funkable.php
视图类SuperSimpleView会被命名为 super_simple.php
助手类BestEverHelper会被命名为 best_ever.php
下面最后一个例子是关系约定:
数据库表: "people"
模型类: "Person",创建 /app/models/person.php控制器类: "PeopleController",创建 /app/controllers/people_controller.php
视图文件, 创建 /app/views/people/index.ctp
使用这些约定,CakPHP就知道 http://example.com/people/ 这个请求需要去调用PeopleController中的index()函数,Person的数据模型是自动有效的(自动与数据库中的 ‘people’表关联),并将其渲染到对应的视图文件。没有一个关联是已经被配置的,你可以根据自己的需要来创建。