CakePHP中文手册【翻译】-配置

配置

1

数据库配置

app/config/database.php 文件是所有数据库配置放置的地方。一个新的安装是没有database.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'   => '');

 

在你的应用程序中,替换缺省的数据库链接信息。

对于prefix有一个说明:这里输入的字符串对于任何SQL调用(当对表工作时,Cake完成对你的数据库的任何SQL调用)都是预先设置好的。这里仅需要定义一次,因此你没有必要在其他地方指定它。如果你在一个提供单个数据库的主机上,那么它也允许你遵循Cake的表命名规则。注意:对于HABTMjoin表,你仅需要增加前缀一次:prefix_apples_bananas而不是prefix_apples_prefix_bananas。

CakePHP支持下面的数据库驱动:

1.    mysql

2.    postgres

3.    sqlite

4.    pear-drivername (例如,你可以输入enter pear-mysql)

5.    adodb-drivername

$default的的连接里,‘connect’关键字允许你指定数据库连接是否是持久的。阅读database.php.default的注释,它帮助你指定你的数据库创建的连接类型。

你的数据库表也应该遵循下面的规则:

1.    Cake使用的表名应该是复数的英文单词,例如’users‘,“authors“或”articles”.注意相应的model是单数名。

2.    表必须有一个命名为’id’的主键。

3.    如果你打算关联表,使用外键,例如:'article_id'。表名是单数的,紧跟着是一个下划线,接下来是’id’.

4.    如果在表中如果包含一个'created' 和/或 'modified',适当的时候Cake会自动增加(内容)[1]

你也会注意到database.php文件包含$test连接。填写这个配置(或者增加其他类似格式的配置),并在应用程序使用它,可以为:

var $useDbConfig = 'test';

内置在你的一个model中,你可以以这种方式增加任何数量的附加连设置

2

全局配置

app/config/core.php里可以发现CakePHP的全局配置。当我们真正不喜欢配置文件时,它不得不完成。这里你可以修改一些配置,这些设置的每一个备注都可以在core.php文件的注释里找到。

DEBUG:当你build它时,为它设置不同的值能帮助你调试应用程序。将它设置为一个非零值,会迫使Cake打印pr()和debug()函数调用的结果,并且自动停止下一步的即时消息(Flash Message)。设置为2或者更大的值会将SQL语句在页面的底部打印出来。

同时,在debug模式下(这里DEBUG设置为1或者更大值),Cake将显示特定生成的错误页面,例如,“Missing Controller”,” Missing Action”等。在产品模式下(DEBUG设置为0),Cake显示”Not Found”的页面,此页面年可以在app/views/errors/error404.thtml重写。

CAKE_SESSION_COOKIE:将此值修改为你打算在Cake应用程序中用户对话的cookie名。

CAKE_SECURITY:修改此值来指定你想要的对话检查等级。Cake将session过期,生成一个新的session id,以及删除原来的session文件,这些文件基于你在这里提供的设置。可能的值有:

1.    high:非活动10分钟后Session过期,而且在每次请求时将重新生成Session id。

2.    medium:非活动20分钟后Session过期

3.    low:非活动30分钟后Session过期

CAKE_SESSION_SAVE:指定你想怎样保存session数据,可能的值为:

1.    cake:在Cake安装目录下的tmp/保存Session数据。

2.    php:按php.ini定义的方式保存Session数据。

3.    database: 将Session数据保存到‘default’键定义的数据库连接。

3

“路由”是一个精简的类似mod_rewrite的纯PHP,它可以将URL映射为controller/action/params。Cake增加了它,让URL变得更加可配置,并使我们脱离mod_rewrite的要求。即使这样,mod_rewrite的使用会让你的地址栏变得更加整洁。

路由是一个单独的规则,它将符合的URL映射为特定的controller和action。可以在app/config/routes.php文件里配置路由。他们可以像下面一样建立:

路由模式

<?php
$Route->connect (
    'URL',
    array('controller'=>'controllername',
    'action'=>'actionname', 'firstparam')
);
?>

 

这里:

1.    URL是你打算映射的常规Cake URL。

2.    controllername是你打算调用的controller名,

3.    actionname 是你打算调用的controller的action名,

4.    firstparam是你已经指定的action的第一个参数值.

跟着firstparam的任何参数同样可以作为参数传给controller action。

下面的例子将/blog下的所有URL加到BlogController。缺省的action是BlogController::index().

Route实例

<?php
$Route->connect ('/blog/:action/*', array('controller'=>'Blog', 'action'=>'index'));
?>

 

/blog/history/05/juneURL可以像下面这样处理:

Controller中的Route处理

<?php
class BlogController extends AppController
{
 function history ($year, $month=null)
 {
   // .. Display appropriate content
 }
}
?>

 

URL的'history'和Blog的路径的:action匹配。*匹配的URL元素作为参数传给活动的controller处理方法,所以是$year和$month.如果调用/blog/history/05,history()仅有一个参数传入,05.

接下来的例子是一个CakePHP缺省的路由,使用它能为PagesController::display('home')创建一个路由。Home是一个可以通过创建文件/app/views/pages/home.thtml重写的视图。

设置缺省的Route

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

4

高级路由配置: 管理路由和web service

/app/config/core.php里,你可以利用一些设置来组织你的应用程序,并精心为你和你的用户打造最有意义的URL。

其中的第一个就是管理路由(admin routing)。假如应用程序有一个ProductsController,并也有NewsController,你可能想创建一些特定的URL,以致那些拥有管理员权限的用户能够访问这些controller里的某些特定action。为了保持URL好看,并易于阅读,对于诸如/products/adminAdd 和 /news/adminPost一样的URL,有些人更倾向于/admin/products/add 和 /admin/news/post

为了做到这样,首先,取消/app/config/core.php文件的CAKE_ADMIN行的注释。CAKE_ADMIN缺省值是‘admin’,你也可以将它修改为你想要的任何东西。牢记此字符串,因为你需要为controller的管理员操作预先准备。因此,在此情况下,管理action会重命名为admin_actionName().这里有一些期望的URL样例,可能的CAKE_ADMIN,以及controller action设置:

/admin/products/add          CAKE_ADMIN = 'admin'
                             ProductsControlle的action名 = 'admin_add()'
 
/superuser/news/post         CAKE_ADMIN = 'superuser'
                            NewsController的action名 = 'superuser_post()'
 
/admin/posts/delete          CAKE_ADMIN = 'admin'
                            PostsController的action名 = 'admin_delete()'

 

使用管理路由,允许你继续组织你的逻辑,同时也使路由更加容易完成。

请注意打开的管理路由或者使用它们,不会打开任何身份验证或安全,需要你自己实现他们。

与此类似,你可以打开Cake的 web service路由,这样也会更加容易。你想让一个controller action作为web service吗?首先,将/app/config/core.php的WEBSERVICES设置为‘on’.这会打开某些自动路由,他们与某些管理路由类似,除了打开一些路由前缀外:

1.    rss

2.    xml

3.    rest

4.    soap

5.    xmlrpc

它做的事情就是允许你提供一个可选择的视图,这些视图会自动在/rss/controllerName/actionName 或 /soap/controllerName/actionName中可用。它允许你创建一个单独的action,此action可能有2个视图:一个是为了normal HTML查看者,另一个是web service使用者。这样,你就可以简单的利用web service使一些应用程序的功能变得可用。

例如,在应用程序中有一些逻辑,此应用程序告诉在我办公室电话旁边的那些用户。对于此数据,我有一个HTML视图,但是我又想以XML的格式提供,这样它才可以用在桌面程序上,或者手持设备的应用程序上。首先我需要做的是打开Cake web service路由:

/app/config/core.php (部分)

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

接下来,我可以在contoller里加入逻辑,一般如下:

messages_controller.php

<?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.
    }
}
?>

 

5

(可选) Custom Inflections Configuration

Cake的命名规则真的非常优美-你可以定义你自己的model,你自己的controller,任何事情都可以。但是也存在一些特例(特别是对非英语的朋友),你可能会碰到某些情况,Cake inflector(类为复数,单数,camelCases以及下划线)不会按照你想的那样工作。如果Cake不认识你的Foci和Fish,那么你需要对custom inflections configuration文件的编辑。

/app/config/inflections.php里,有一系列Cake变量,你可以用来调整cake的类名的复数,单数,连同正在定义术语。这些术语不会无规律的改变(对于没有入门的caker来说,像Fish和Deer)。

按照文件里的说明做出调整,或者取消他们在文件中的注释作为样例。在深入之前,你可能需要知道一些关于正则表达式的知识




[1] created是创建日期,modified是更改日期,译者注

posted @ 2006-11-03 11:46  张太国  阅读(...)  评论(...编辑  收藏