现在的位置: 首页 > 综合 > 正文

我正在翻译的CakePHP manual

2012年05月10日 ⁄ 综合 ⁄ 共 9419字 ⁄ 字号 评论关闭
 

CakePHP manual的中文翻译(粗略翻译,学习笔记)

   

1,读者

这份手册是为了那些像快速建立web程序的人所写。CakePHP是为了帮助PHP各个层次用户简单快速的创建健壮、可维护的程序

这份手册需要一些PHPHTML的基础知识,对MVC变成模式的一些了解。

2,CakePHP是免费的

    遵循MIT License,主页http://www.cakephp.org

3,社区   

    更多信息http://www.cakephp.org

 

第一章 CakePHP介绍

1,什么是CakePHP

       CakePHP是一个开元的PHP的快速开发框架

2,为什么用CakePHP

CakePHP拥有一些快速开发的特征

1,兼容PHP4PHP5

2,提供整合的数据库交互CRUD和简单的查询(包括 scaffolding

3Request dispatcher(原文Request dispatcher with good looking, custom URLs

4,快速可变的模版(使用helpersPHP语法)

5,许多有用的核心特征(access control lists以及AJAX整合等等)

6,在任何网站子目录下面都正常工作,很少需要Apache的配置(原文Works from any website subdirectory, with little to no Apache configuration involved

3CakePHP的历史

    2005年,Michal TatarynowiczPHP写了一个快速开发的框架并发现这是一个好的框架的开始,于是Michal TatarynowiczMIT License下公布了这个框架并命名为Cake,并向开发者社区公布,后者现在维护项目并命名为CakePHP

 

第二章 基本概念

1 MVC模式

    为了更好的理解类似Cakeweb程序,你需要了解一些 Ruby on Rails这个框架,Cake的灵感就来自于Ruby on RailsRuby on Rails编程语言Ruby的网站开发框架。它实现了Active RecordMVC模式。文章 What goes Where?详细解释了Rails的结构,Cake也使用了类似的结构。

 

    Model View ControllerGang of Four描述的一个软件的设计模式,Dean Helman介绍:“MVC模式,将一个项目,甚至是一个借口分成三个部分:modelviewcontroller。开发MVC是为了将传统的输入,处理,输出映射到GUI领域

 

Input -> Processing -> Output

Controller -> Model -> View

 

用户输入,外部世界的模型和显示用户的输出被model,view portcontroller objects所操作。controller将用户的鼠标、键盘操作解释并映射到对应的命令,然后发送给model或者view并影响相应的变化。model管理一个或若干数据元素,根据状态的查询、变化状态的操作做对应的响应。view port管理一个矩形的显示,并通过图形和文字的结合对给用户准备好的数据作出响应(注:我认为就是显示出来)

 

关于MVC,你可以通过这个文章了解更多的机制 MVC: Most vexing conundrum

 

2Cake的文件结构

    当你解压缩安装包,你会发现四个文件夹app, cake, tmp vendors.其中cake文件夹是cake的核心库,基本上你不需要进行修改除非你需要对Cake进行一些定制

    0.10.0版本发布之前,CakePHP并不是这样的,老版本都是在一个统一的文件夹Cake下面,这种结构证明有一些问题 

    1,如果你有许多的web应用程序,你需要下载并安装Cake两次,这样核心库就重复了,这个是空间的一种浪费。并且违背了CakePHP试图遵循的DRY哲学原则

    2,当CakePHP新的版本发布时,你必须非常小心的以免你的app文件夹下面的程序被默认的程序覆盖

 

app文件夹是你的程序和文件所在的地方。核心库文件夹cake和程序文件夹app的愤慨使得你可以有许多的程序,但只需要一份cake库,并且使得升级CakePHP变得更加容易:你只需要下崽最新版本的Cake并把你当前的核心库cake文件夹覆盖掉,而不需要旦夕覆盖掉你的app文件夹

 

    tmp文件夹是用于存储cake操作的变量,比如bakingcachinglogging

    vendors文件夹用于存放第三方库文件,你需要在稍后更多的了解vendors

 

    下面的列表显示了主要的文件夹和他们的基本目的

cake(根目录)

app(存放你的程序)

    config(配置文件,比如ACLcore, database connectionroutes, paths, tags

    controllers(放置controllers)

        (components,帮助你使用controller的类)

    index.php(cake中有三个该文件,方便用户用不同的方法配置cake)

    models(放置models

    plugins(放置plugins或者第三方程序)

    viewsview相关文件)

        elements(一些重复使用的较小的layout item

        errors(错误文件)

        helpers(自定义的helpers文件)

        layouts(layout文件)

        pagesPagesController管理的静态内容)

    webroot(把这个目录设置成为网站根目录,并将public files放在这里)

        css

        files

        img

        js

cake(库文件:最好不要修改)

index.php

tmp(用来放置logs,baking)

vendors(粘贴第三方库文件)

 

第三章 安装CakePHP

1Requirements

    你必须有一个服务器,具备程序和库来运行CakePHP

1.1 服务器的要求   

    1.HTTP服务端(比如Apache),下面的选项要打开:sessions, mod_rewrite(虽然不是必须但是建议有)

    2.PHP 4.3.2或者更高版本,CakePHPPHP45下都能很好工作

    3.数据库引擎(现在已经支持MySQLPostgreSQL and a wrapper for ADODB

 

2.安装CakePHP

2.1 得到最新的稳定版本

    www.cakephp.org 点击Downloads>Release

2.2 解压缩

    放置到根目录,解压缩,有两种安装方式,开发方式安装使得你可以容易的在一个域名下面察看许多CakePHP程序,产品安装方式使得一个域名下面只有一个程序

 

3. 建立CakePHP

    第一种方法在开发环境下比较合适,但是并不安全。第二种方法跟甘泉可以安装在最终产品的环境下

3.1 开发方式安装

为了开发,我们可以将整个Cake的安装目录放到特殊的DocumentRoot下,如下:

/wwwroot/

    /cake

        /.htaccess

        /app/

        /cake/

        /index.php

        /tmp/

        /vendors

 

 

 

 

 

 

 

 

 

 

 


这种安装wwwroot当作整个网站的目录,所以你的URL如下显示

www.example.com/cake/index.php

 

 

如果你使用了mod_rewrite, 你的URLs会变成下面的这种形式

http://www.example.com/cake/controller_name/action_name/param1/param2 pattern

 

 

3.2 产品方式安装

为了实现产品方式的安装,你必须用于修改服务器上网站根目录的权限,修改根目录,使得整个域像只有一个CakePHP程序

安装后的程序结构如下

../path_to_cake_install/

    /.htaccess

    /app/

        /config/

        /conftrollers

        /index.php

        /models

        /plugins

        /views

        /webroot <-- This should be your new DocumentRoot

    /cake/

    /index.php

    /tmp/

    /vendors

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.1 建议的httpd.conf

DocumentRoot /path_to_cake/app/webroot

 

 

在这种配置下,webroot就当作了网站的根目录,你的URL就可能像下面这样

http://www.example.com/

 

 

如果你使用了mod_rewrite,你的URL就会类似于下面的

http://www.example.com/controller_name/action_name/param1/param2 pattern

 

一些共享主机的用户可能没有权限通过修改http.conf来改变DocumnentRoot来指向他们的产品安装。在这种情况下,用户可以安装下面的方式,修改CakePHP的结构。Cake安装在 /path_to_cake_install,文件目录(不可以修改)指向/public_html

/path_to_cake_install

/app

/cake

/index.php

/models

/plugins

/views

/webroot

 

 

 

 

 

 

 

 

 

/public_html (= contents of /app/webroot)

/.htaccess

/css   

/css.php        

/favicon.ico    

/files          

/img            

/index.php      

/js

 

 

 

 

 

 

 

 

 

 

实际上,你将Cake/app/webroot文件夹的内容拷贝到你已经存在的DocumentRoot。为了告诉Cake你的webroot文件在哪里,将下面几行田间到你DocumentRoot文件夹下面的index.php中(针对上面的例子就是/public_html/index.php

 

define('ROOT', BASE_DIR.'/path_to_cake_install');

define ('APP_DIR', 'app');

define ('WEBROOT_DIR', '/public_html');

 

 

 

 

4. 配置Apachemod_rewrite

       CakePHP没有mod_rewrite支持时候,我们发现许多用户由于不能完美运行他们的系统而苦恼。下面是一些可能需要尝试并且使之正确运行的事情:

     确定 .htaccessoverride是允许的:在你的httpd.conf中,你需要有一段代码,在你的服务器上每个目录。确定AllowOverride对当前的目录设置成为All

     确定你修改的是系统的httpd.conf,而不是用户或者特定站点的httpd.conf

     在某些情况下,你可能得到一份缺少 .htaccess文件的CakePHP,这可能是因为某些系统把 .开头的文件当作隐藏文件就不拷贝。确定你拷贝的文件来中包含.htaccess

     确定你正确上传mod_rewrite。你可以查看一下 httpd.conf中类似于LoadModule rewrite_module libexec/httpd/mod_rewrite.so AddModulemod_rewrite.c

 

5. 确定CakePHP正确工作

现在,我们实际查看一下。根据你选择不同的安装方式,你应该将你的浏览器的URL指向 http://www.example.com或者http://www.example.com/cake.这时,你会看到CakePHP的默认目录,以及一条数据库连接状态的消息。

恭喜!你现在已经可以创建你的第一个基于Cake的程序了。如果你现在什么都没有看到或者受到一条错误信息,可以到http://wiki.cakephp.org或者#cakephp on irc.freenode.net寻找更多的帮助。

 

第四章 配置

1. 数据库配置

    app/config/database.php文件是数据库配置文件。默认安装后并没有database.php文件,所以你需要拷贝database.php.defaultdatabase.php. 之后,你可以看到如下:

4.1

var $default = array('driver'   => 'mysql',

                     'connect' => 'mysql_pconnect',

                     'host'     => 'localhost',

                     'login'    => 'user',

                     'password' => 'password',

                     'database' => 'project_name' );

 

 

 

 

 

 

 

根据你的数据库连接信息替换上面的配置

CakePHP支持下面的数据库驱动

mysql

postgres

sqlite

pear-drivername (so you might enter pear-mysql, for example)

adodb-drivername

 

 

 

 

 

 

$default 连接中的connect key允许你设置是否需要持久连接数据库,请仔细阅读database.php.default文件中的注释,以配置你的数据库连接类型。

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

     cake使用的表名(Table name)应该有英文的复数形式组成,比如users, authors, articles. 注意,对应的model是单数形式

     所有的表 都必须有一个主键叫做 id

     如果你需要关联tables,使用外键比如 article_id 。表的名字是单数,必须是小写,比如id

     另外,最好遵从下面的命名规则以便更方便的使用某些功能

Include a ‘created’

Include a ‘modified’

    你也可能注意到了database.php文件中有一个$test的连接,填上这个配置(或者添加其他类似的配置文件),在你使用的时候将下面的代码

var $useDbConfig = 'test';

 

添加到你的一个models

 

2. 全局配置

    CakePHP的全局配置可以在/app/config/core.php找到。尽管我们确实不喜欢配置文件,但是配置确实很难做。在这个文件中你可以修改一些,每一项设置都可以在core.php的注释中找到。

 

DEBUG: 设置这个变量不同的值可以帮助你在运行文件的时候debug你的程序。江这个值设成不同的非0值,可以使得Cake打印出SQL语句并且阻止程序下一步进行(原文:Specifiying this setting to a non-zero value will force Cake to print out SQL statements and stop flash messages from forwarding.)

CAKE_SESSION_COOKIE:在你的Cake应用中,这个变量可以设置成为保存用户sessioncookie名字

CAKE_SECURITY:这个变量不同的值达标不同的sessions检查等级。Cake创建新的session,删除旧的session都基于这个变量。下面是可能的值:

        high: session十分钟后失效

        medium: session 二十分钟后失效

        low: session 三十分钟后失效

CAKE_SESSION_SAVE: 设置如何保存session。下面是可能的值

        cake: 保存在tmp/目录下

        php: 根据php.ini中的设置保存

        database: 被保存到默认(现在还没有实现,以后继续完善)

 

3.路径设置

Routing是类似于mod_rewrite pared-down pure-PHP(机制),可以帮助将URL影射到 controller/action/params. Cake 添加这个可以帮助我们更好的实现URL转化并使得我们可以脱离mod_rewrite的要求。然而使用mod_rewrite,使得我们的address bar显得更加整洁。

    Routes是映射URLs到特定的controllersactions的独立规则。Routes被配置在app/config/routes.php文件中,设置形式如下:

4.2 Route Pattern

<?php

$Route->connect (

    'URL',

    array('controller'=>'controllername',

    'action'=>'actionname', 'firstparam')

);

?>

 

 

 

 

 

 

 

在这里

URLCakeURL你想要映射的(URL is the Cake URL you wish to map

controllername 是你想要调用的controller的名字

actionname 是你想要调用controlleraction的名字

firstparam是特定的action的第一个参数

 

下面的这个例子将/blog下面的所有URL连接到了BlogController. 默认的actionBlogController::index()

<?php

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

?>

4.3 Route Example

 

一个URL 比如 /blog/history/05/june 处理如下:

 

4.4 Route Handing in a Controller

 

<?php

class BlogController extends AppController

{

function history ($year, $month=null)

    {

        //..display appropriate content

    }

}

?>

 

 

 

 

 

 

 

 

 

 

URL中的’history’被匹配到 Blog route中的:action.( The 'history' from the URL was matched by :action from the Blog's route.) URL中被*匹配的元素被传递到活动的controller的处理方法,这里是$year$month。比如这个URL /blog/history/05, 仅仅传递一个参数05history()

    接下来的例子是默认的CakePHP route,指向 PagesController::display(‘home’).其中home是一个view,位于/app/views/pages/home.thtml

 

4.5 Setting the Default Route

<?php

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

?>

 

 

 

 

 

第五章 Scaffolding (脚手架?)

class CategoriesController extends AppController

{

    var $scaffold;

}

Scaffolding是一个很棒的途径,使得早期开发的部分web应用能够运行起来。早期的数据库模式是不稳定的,很容易变化。Scaffolding有个下降趋势:web程序员憎恨创建以后可能根本用不到的forms。为了减少程序员的这种重复劳动, Cake中包含了ScaffoldingScaffolding分析数据库,创建一些标准的使用adddelete、和edit按钮的lists,创建输入的forms,以及查看数据库中一个item的标准views。为了在程序中的controller中添加Scaffolding,需要添加$scaffold变量:

 

 

 

 

 

 

有关Scaffold,要注意一个重要的问题: Scaffold期望每个以_id结尾的filed name是一个外键并且指向一个tabletable的名称和_id前方的一样(只不过是小写的)。所以,举个例子来说,如果你嵌套了分类,你最好有个列叫做parent_id。在这个版本中,最好能够命名为parentid.同样,在表中有一个外键(比如,titles table有个category_id,并且你已经合适的联结到models(查看6.2理解联结),在show/edit/newdviews中,选择的表将会和外键的表(category)一起自动的表现出来(原文:a select box will be automatically populated with the rows from the foreign table (category) in the show/edit/new views.)。在foreign model中设置$displayField来决定foreign中哪些field会被显示。继续我们的例子,category有个标题

 

class Title extends AppModel

{

    var $displayField = 'title';

}

 

 

 

 

 

 

第六章 Models

本章内容:

1. Model Function

       1.1 用户定义的Function

       1.2 检索(retrieving)你的数据

       1.3 保存你的数据

       1.4 Model的回调(callbacks

2. Model的变量

3. Associations

 

Model是什么,它是MVC模式中的M

Model做些什么。它使得domain logicpresentation分隔开,独立application logic(It separates domain logic from the presentation, isolating application logic.)

      

       一个Model概要的说就是一个指向数据库的access,更具体,就是数据库中的特定的table。默认的,每个model都使用自身名字复数形式的table,比如,User Mode使用 users

tableModels可以维护数据特定的规则,联结信息以及它使用的table的方法。

 

抱歉!评论已关闭.