返回顶部

[文摘] 配置CakePHP

[复制链接]
awagink 显示全部楼层 发表于 2008-11-22 16:18:24 |阅读模式 打印 上一主题 下一主题
配置CakePHPSection 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了。

app/config/database.phpvar $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的第一个参数名

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/*', array('controller'=>'Blog', 'action'=>'index'));
  • ?>
  • A URL like /blog/history/05/june can then be handled like this:
  • Route Handling in a Controller
  • <?php

  • class BlogController extends AppController
  • {

  • function history($year, $month=null)
  • {

  • // .. Display appropriate content
  • }
  • }
  • ?>

Route Example<?php$Route->connect ('/blog/:action/*', array('controller'=>'Blog', 'action'=>'index'));?>A URL like /blog/history/05/june can then be handled like this:Route Handling in a Controller<?phpclass BlogController extends AppController{ function history($year, $month=null) {   // .. Display appropriate content }}?>                 
URL中的'history'通过Blog's route中的:action匹配。URL中通过*匹配的内容都被当作parameters传递到:action对应的方法中,就像这里的$year和$month。如果URL是/blog/history/05,则history()方法只会得到一个参数,05。
下面这个例子是CakePHP默认设置的一个route来为PagesController::display('home')配置路由。Home是Cake的默认首页视图,你可以在这个位置找到并修改它/app/views/pages/home.thtml。

  • Setting the Default Route
  • <?php

  • $Route->connect ('/', array('controller'=>'Pages', 'action'=>'display', 'home'));
  • ?>

Setting the Default Route<?php$Route->connect ('/', array('controller'=>'Pages', 'action'=>'display', 'home'));?>                 
Section 4 高级路由配置:Admin路由与Webservice在/app/config/core.php中还有那么一些高级选项可以供你使用,你可以利用它们使你的URL精巧地适应绝大多数情况。
第一个介绍的选项是管理员路由(admin routing)。假设你有两个Controller,ProductsController 和 NewsController,你肯定希望能有一些特别的URL给具有管理权限的用户来访问Controller中一些特别的action。为了保持URL的优雅和可读性,有些程序员相比 /products/adminAdd 和 /news/adminPost 更喜欢 /admin/products/add 和 /admin/news/post。
激活这个功能,首先你需要把/app/config/core.php中CAKE_ADMIN的注释去掉。CAKE_ADMIN的默认值是'admin',不过你可以修改为任何你喜欢的名字。但是你要记住这个名字,因为你需要在每一个admin action名字前面加上这个前缀,格式为admin_actionName()。
/admin/products/add          CAKE_ADMIN = 'admin'                             name of action in ProductsController = 'admin_add()'/superuser/news/post         CAKE_ADMIN = 'superuser'                             name of action in NewsController = 'superuser_post()'/admin/posts/delete          CAKE_ADMIN = 'admin'                             name of action in PostsController = 'admin_delete()'                使用admin route可以让你的业务逻辑非常井井有条。
注意!!并不是说使用了admin route同时Cake也替你完成了安全和认证,这些还是需要你自己来完成的。

类似的,你也能很快的为webservice建立路由。你需要将某个action暴露为webservice接口吗?首先,将/app/config/core.php中的WEBSERVICES选项设为'on'。和先前的admin一样,打开这个选项可以很方便的让带有如下前缀的action自动暴露为webservice接口。
  • rss
  • xml
  • rest
  • soap
  • xmlrpc
这样做的结果就是同一个action,拥有了两种不同的视图,一个是标准的HTML视图,一个是webservice接口。因此你可以非常简单的让你的程序拥有webservice的能力。
举个例子,我的程序中有这么一个逻辑,有这么一个action可以告诉用户当前办公室里有多少人正在通话。我已经有了一个HTML视图,不过我希望再提供一个XML格式的接口供我的桌面Widget(译注:就是类似yahoo widget一类的桌面小贴士)或者是掌上设备来使用。首先,我打开了webservice路由功能:

  • /app/config/core.php (partial)

  • /**
  • *  The define below is used to turn cake built webservices
  • *  on or off. Default setting is off.
  • */
  •     define('WEBSERVICES', 'on');

/app/config/core.php (partial)/** *  The define below is used to turn cake built webservices *  on or off. Default setting is off. */    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.
  •     }
  • }
  • ?>

<?phpclass 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的一些变量,你可以来调整名字单复数约定等。你需要详细阅读文件中的注释,并且最好具备正则表达式知识,否则请误随便修改该配置文件。

from: http://www.1x3x.net/cakephp/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

纳速健身网成立于2006年8月,是国内优秀健身运动网站,现拥浏览人数超30万。网站是集养生、武术、太极拳和健身气功等多种健身项目于一体的多功能交流平台。平台提供大量优质的教学视频、伴奏音乐(太极拳晨练音乐,广场舞音乐,健身气功音乐)、图文教程、运动科普和经验分享,为健身爱好者提供完善的运动指导平台。
  • 纳速QQ群乙:151815303
  • 纳速QQ群丙:79104490
  • 微信交流群:微信好友搜索【nasuwang】加小纳微信进群交流健身知识,备注【纳速】
  •                     或者扫描页面底部右侧二维码添加小纳微信>>>
  • 微信公众号

  • 微信群客服交流

  • Copyright © 2006-2021, 纳速健身网. | | 辽ICP备13002388号-1 辽公安网备21050202000005号公安网备号 纳速武术-乙 QQ