Section 1 数据库配置
app/config/database.php 这个文件包含了所有的数据库配置。新安装的Cake是没有datebase.php这个文件的,你需要从database.php.default复制一份过来并重新命名,内容如下:
- app/config/database.php
- var
$default = array('driver' => 'mysql', -
'connect' => 'mysql_connect', -
'host' => 'localhost', -
'login' => 'user', -
'password' => 'password', -
'database' => 'project_name', -
'prefix' => ''); -
- 和大多数php程序一样,修改一下你的配置就ok了。
-
关于前缀要提醒一下:这里定义的前缀将会用在任何一处由Cake发起的对数据表的SQL操作中。你在这里定义过后不能再在其它地方重新定义它。假设你的服务器只给了你一个单独的database,它同样可以让你遵循Cake的表名约定。注意:对于HABTM(has-and-belongs-to-many),也就是多对多关联表,你只需要添加一次前缀prefix_apples_bananas,而不是prefix_apples_prefix_bananas。
CakePHP支持下列数据库驱动:
- mysql
- postgres
- sqlite
- pear-drivername (so you might enter pear-mysql, for example)
- adodb-drivername
$default连接中的'connect'可以指定这个连接是否是persistent连接。参考database.php.default中的注释来决定采用何种方式。
Rails两大原则之一,就是约定大于配置,所以你定义的数据表名必须遵循下面的命名约定:
1. 表名为英语单词的复数形式,例如"users", "authors"或者"articles"。注意与之对应的model对象则使用单数形式做名字。 2. 表字段必须有一个主键字段叫'id'。(相信用过ORM工具的都明白个中道理吧) 3. 如果你使用外键关联表,外键字段必须定义成这个样子:'article_id'。即关联表名的单数形式加上下划线然后id。其实也很好理解,并不需要特别记忆吧。 4. 如果你定义了 'created' 'modified'这样的auditor字段的话,Cake会自动在操作的时候去填充。(译注:rails果然周全,hibernate里面的interceptor就那么容易的做到了)
你应该注意到,同样的还有一个$test的数据库连接配置项,这是考虑到一般开发数据库和生产数据库通常并不是同一个,所以你可以在程序通过var $useDbConfig = 'test'来切换数据库连接设置。
在你的model对象中,你可以通过这样的方式来添加任意多个附加数据库连接。
Section 2 全局配置
CakePHP的全局配置文件为/app/config/core.php。尽管我们非常讨厌配置文件,但是还是有些配置需要去做。文件中的注释对每一个配置项都有很详尽的说明。
DEBUG:这个选项定义了应用程序的Debug级别。设置为一个非零的数值Cake会输出所有的pr()和debug()函数调用,并且在Forward之前会有提示信息。设置为2或者是更高的数值,则会在页面底部输出sql语句。
在debug模式下(DEBUG被设为1或者更高),Cake会输出错误自定义错误页面,例如 "Missing Controller","Missing Action"等等。在生产环境下(DEBUG被设为0),Cake输出 "Not Found"页面,你可以自行修改该页面(app/views/errors/error404.thtml)。
CAKE_SESSION_COOKIE: 这个设置可以设定你所希望使用的cookie名字。
CAKE_SECURITY:改变这个值标示了你所希望采用Session校验级别。Cake会根据你设定的值来执行Session超时,生成新的session id,删除历史session file等操作。可以选择的值如下所示:
1. high:最高安全级别,10分钟没有活动的session被置为超时,同时每一次请求都将生成新的session id 2. medium: 20分钟没有活动的session会被置为超时 3. low: 30分钟没有活动的session会被置为超时
CAKE_SESSION_SAVE:设置你的session数据储存策略:
1. cake:Session被保存在Cake安装目录下的tmp目录 2. php: Session被保存在php.ini文件设置的储存路径下 3. database: Session保存在$default数据库连接所指定的库中
Section 3 路由(Route)配置
"Routing"是一个纯PHP,类似mod_rewrite的机制,来实现URL和controller/action/params的自动映射。通过这个机制Cake可以拥有简洁且可配置的URL并且可以摆脱对mod_rewrite的依赖。当然使用mod_rewrite会让你的浏览器地址栏变得更加简洁。
Routes(路由)是独立的URL和指定的controller和action映射规则。路由规则在app/config/routes.php里面配置。示例如下:
- Route
Pattern - <?php
- $Route->connect
( -
'URL', -
array('controller'=>'controllername', -
'action'=>'actionname', 'firstparam') - );
- ?>
-
-
-
1. -
URL是一个正则表达式,表示你希望采用的URL格式 -
2. -
controllername是希望调用的controller的名字 -
-
3. -
actionname是希望调用的controller的action名字 -
-
4. -
firstparam是action的第一个参数名 -
第一个参数之后的所有参数作为parameters被传递到action。
下面是一个简单的示例,所有的url都被定向到BlogController。默认的action为BlogController::index()。
- Route
Example - <?php
- $Route->connect
('/blog/:action -
define('WEBSERVICES', 'on'); -
然后我在controller中构建代码如下:
- <?php
- class
PhonesController extends AppController - {
-
function doWhosOnline() -
{ -
// this action is where we do all the work of seeing who's on the phone... -
-
// If I wanted this action to be available via Cake's xml webservices route, -
// I'd need to include a view at /app/views/posts/xml/do_whos_online.thtml. -
// Note: the default view used here is at /app/views/layouts/xml/default.thtml. -
-
// If a user requests /phones/doWhosOnline, they will get an HTML version. -
// If a user requests /xml/phones/doWhosOnline, they will get the XML version. -
} - }
- ?>
-
Section 5 自定义反射配置(可选)
Cake的命名约束真的是非常不错,你可以命名model为Box,controller为Boxes,于是所有的问题都解决了。但是考虑到有的情况下(特别是非英语国家)这样的命名约束不如你意的话,你可以通过自定义反射配置来满足你的需求。
/app/config/inflections.php,这里定义了Cake的一些变量,你可以来调整名字单复数约定等。你需要详细阅读文件中的注释,并且最好具备正则表达式知识,否则请误随便修改该配置文件。