基本概念
Section1 简介
本章节篇幅很短,简单的介绍一下MVC概念以及在cake中是如何实现的。如果你对mvc模式很陌生,这个章节将会非常适合你。我们由常规的MVC概念开始我们的讨论,然后用我们的方式在CakePHP中使用MVC模式,并且展示几个简单的示例。
Section 2 MVC模式
[TODO 考虑到MVC模式是必需过桥技能,所以建议还是先看一下相关文章,原文很简单,最后补上望海涵]
Section 3 Cake目录结构一览
当你解压缩Cake后,会发现有3个主目录
- app
- cake
- vendors
cake目录下是核心lib,通常情况下你不要接触它们。
app目录下是你的程序文件所存放的位置。将app目录和cake目录分开,从而可以使多个应用共享一个cake类库。同样的也使得CakePHP的升级变得很容易:你只需要下载最新的版本并且覆盖原来的类库就可以了。不用担心会覆盖掉你的应用程序文件。
你可以使用vendors目录来存放一些第三方类库。后面的章节将会讲到更多关于vendors的内容,一个最基本的概念就是你可以非常方便的通过vendor()方法来调用vendor类库。
让我们来看一下完整的目录结构:
/app /config - 配置文件目录,包括Database, ACL等 /controllers - Controllers文件 /components - Components文件 /index.php - 允许你将app目录部署为DocumentRoot (译注:参见Apache相关配置) /models - Model文件 /plugins - Plugins文件 /tmp - Cache和日志存放处 /vendors - 你的应用中使用到的第三方类库 /views - 视图文件 /elements - 视图元素文件 /errors - 自定义错误页面 /helpers - Helpers文件 /layouts - 页面布局文件 /pages - 静态页面文件 /webroot - web根目录 /css /files /img /js /cake - 核心类库,请不要随意修改任何文件,除非你确信你有这个能力 index.php /vendors - 服务器端的第三方类库
安装CakePHP
Section 1 简介
现在你已经了解了每一件事情,包括系统的结构和整个类库的目的,或者说你略过了上述章节,因为你对这些资料并不感兴趣只是希望快点开始工作。Anyway 你已经摩拳擦掌准备完毕了。
这个章节来介绍了哪些是必须被安装到服务器上的,不同的配置方案,如何下载并安装CakePHP,访问默认页面,以及一些troubleshooting以备一些意外情况的发生。
Section 2 安装必需
[TODO 一些译者认为比较基础的内容暂时优先级设为低 完美版释出时会补上]
Section 3 安装CakePHP
[TODO]
Section 4 设置CakePHP
第一种设置方案仅推荐使用在开发环境下,因为它不是最安全的方案。第二种方案考虑了更多的安全性问题因而可以放心的使用在生产环境下。
注意:/app/tmp 目录必须具有写权限
开发环境设置
对于开发环境来说,我们可以把整个Cake目录放置在DocumentRoot下:
/wwwroot /cake /app /cake /vendors .htaccess index.php
这样的设置方案下,你的URL会如下这般(假设你使用了mod_rewrite):
www.example.com/cake/controllerName/actionName/param1/param2
生产环境设置
使用生产环境配置,你必须拥有修改Web Server DocumentRoot的权限。那样的话,整个域就如同一个CakePHP应用一般。
生产环境配置使用如下目录结构
../path_to_cake_install /app /config /controllers /models /plugins /tmp /vendors /views /webroot <-- 这将是你新的DocumentRoot .htaccess index.php /cake /vendors .htaccess index.php
建议修改Apache的配置文件如下:
DocumentRoot /path_to_cake/app/webroot
这样的配置下,你的URL将会如下这般:
Http://www.example.com/controllerName/actionName/param1/param2
高级设置
在有些情况下,你希望能够将Cake应用的目录放在磁盘不同目录下。这可能是因为虚拟主机的限制,或者你希望多个app应用能够共享同一个Cake Lib。
对于一个Cake应用,有3个主要组成部分:
1. CakePHP核心Lib - /cake目录下 2. 你的应用的代码(例如:controllers, models, layouts and views) - /app目录下 3. 你的应用web目录下的文件 (例如 图片 js脚本以及css样式文件等) - /app/webroot 目录下
这3个目录都可以放置在磁盘的任意位置,但是webroot目录必须是web server可以访问的。你甚至可以把webroot目录移出app目录,只要你告诉Cake你把它们放到哪里去了。
你需要修改/app/webroot/index.php来完成配置(和Cake一起分发)。你需要修改3个常量:ROOT, APP_DIR, and CAKE_CORE_INCLUDE_PATH。
1. ROOT 为包含app目录的根路径 2. APP_DIR app目录路径 3. CAKE_CORE_INCLUDE_PATH Cake核心Lib目录 你的应用web目录下的文件 (例如 图片 js脚本以及css样式文件等) - /app/webroot 目录下
这是范例:
/app/webroot/index.php (partial, comments removed) if (!defined('ROOT')) { define('ROOT', dirname(dirname(dirname(__FILE__)))); } if (!defined('APP_DIR')) { define ('APP_DIR', basename(dirname(dirname(__FILE__)))); } if (!defined('CAKE_CORE_INCLUDE_PATH')) { define('CAKE_CORE_INCLUDE_PATH', ROOT); }
下面通过一个具体的例子来解释我的配置
1. 我希望Cake Lib能够被共享,所以放在user/lib/cake下 (译注:作者都是linux配置,windows环境下随便放放吧) 2. Cake webroot 目录为/var/www/mysite/。 3. 程序文件目录为/home/me/mysite。
下面为具体的目录结构,不再赘述
/home /me /mysite <-- Used to be /cake_install/app /config /controllers /models /plugins /tmp /vendors /views index.php /var /www /mysite <-- Used to be /cake_install/app/webroot /css /files /img /js .htaccess css.php favicon.ico index.php /usr /lib /cake <-- Used to be /cake_install/cake /cake /config /docs /libs /scripts app_controller.php app_model.php basics.php bootstrap.php dispatcher.php /vendors
我按照上面的目录结构修改/var/www/mysite/index.php如下:
我建议使用'DS'常量代替路径中的斜杠。这样会保证你不会写错导致找不到文件。(考虑跨平台)
Section 5 配置Apache的mod_rewrite
CakePHP和mod_rewrite一同工作时会是最佳体验,我们发现有部分用户在他们的系统上不能让每件事情都很好的运作起来。所以我罗列了一些可能会有帮助的信息:
1. 首先确认.htaccess覆写是被允许的:在apache配置文件中检查<Directory>配置下的AllowOverride是不是设置为All。 2. 确认你修改的是server的配置文件而不是当前用户或者特定站点的配置文件。 3. 有的时候,可能你得到的CakePHP副本缺少了必须的.htaccess文件。因为有的操作系统会将以.开头的文件视作隐藏文件,因而不会拷贝它们。确定你的CakePHP副本是我们网站上下载或者是我们的svn repository上checkout的。 4. 确认你是否成功加载了mod_rewrite!察看配置文件中是否有'LoadModule rewrite_module libexec/httpd/mod_rewrite.so' 和 'AddModule mod_rewrite.c'。 5. 如果你把Cake安装在一个用户目录下的话(http://example.com/~myusername/),你需要修改根目录中的.htaccess文件,加上一行"RewriteBase /~myusername/"。 6. 如果你发现URL后面加上了冗长乏味的sessionID的话 (http://example.com/posts/?CAKEPHP=4kgj577sgabvnmhjgkdiuy1956if6ska) 你需要加上一行"php_flag session.trans_id off"就ok了。
Section 6 确认Cake可以出炉了
好吧,让我们来看看这个baby吧。鉴于你选择的配置方式,你可以通过 http://www.example.com or http://www.example.com/ 来访问它。你会看到CakePHP的默认主页,和一个简短的通知消息,描述了你当前的数据库连接状态。
祝贺你!你已经完成了开始第一个CakeApp的准备工作。