当前位置: 代码迷 >> Web前端 >> 施用 CakePHP 快速打造 Web 站点
  详细解决方案

施用 CakePHP 快速打造 Web 站点

热度:780   发布时间:2012-12-25 16:18:29.0
使用 CakePHP 快速打造 Web 站点

安装

无论您的经验水平如何,CakePHP 都可以使应用程序更易于快速编写和维护,从而简化您的工作。CakePHP 有很多非常酷而且十分有用的特性。CakePHP 可以为您处理 Ajax、数据检验和会话。如果可以编写插件告诉 CakePHP 怎样做,它甚至能提供更多帮助。现在您还不能使用 CakePHP。需要先安装 CakePHP。

解压和安装

为了达到本教程的目的,应当在 Web 服务器的 Web 根目录内解压整个 CakePHP 安装目录。在清单 1 中,Web 根目录是 /webroot。


清单 1. 解压 CakePHP 安装目录

					
unzip cake_1.2.2.8120.zip
cd cake_1.2.2.8120
mv * /webroot
                

?

输入 ls -la /webroot 以列出 Web 根目录的内容并检验文件是否已被正确复制。输出应当类似于清单 2。


清单 2. ls 命令的输出

					
-rw-r--r--    1 YOURUSER  YOURGROUP       139 2007-12-15 22:50 htaccess
drwxr-xr-x   12 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 app
drwxr-xr-x    7 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 cake
-rw-r--r--    1 YOURUSER  YOURGROUP      2303 2007-12-15 22:50 index.php
drwxr-xr-x    5 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 vendors

?

目录 app/tmp 必须是 Web 服务器可写的。通过输入 ls -l app 确认对这个文件夹的权限。输出可能类似于清单 3。


清单 3. 确认文件夹权限

					
-rw-r--r--    1 YOURUSER  YOURGROUP       139 2007-12-15 22:50 .htaccess
drwxr-xr-x    3 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 config
drwxr-xr-x    3 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 controllers
-rw-r--r--    1 YOURUSER  YOURGROUP       953 2007-12-15 22:50 index.php
drwxr-xr-x    3 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 locale
drwxr-xr-x    3 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 models
drwxr-xr-x    2 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 plugins
drwxr-xr-x    5 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 tests
drwxr-xr-x    6 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 tmp
drwxr-xr-x    3 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 vendors
drwxr-xr-x    8 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 views
drwxr-xr-x    6 YOURUSER  YOURGROUP      4096 2007-12-15 22:50 webroot
                

?

完成此任务的最简单方法可能是最常见也是最不安全的:将写权限授予每个人。

chmod -R 777 app/tmp
ls -l app
                

?

tmp 文件夹的权限应当已经被更新,如下所示。

drwxrwxrwx    7 YOURUSER  YOURGROUP      2007-12-15 22:50 tmp
                

?

通常情况下, 建议将写权限授予每个人。理想情况下,应当将这个文件夹的所有权授予 Web 服务器使用的那个用户,或将 Web 服务器使用的那个用户添加到这个目录的一个组中并添加组的写权限。本教程旨在演示如何使用 CakePHP,并不是有关构建安全应用程序的指南。虽然安全性应当是任何应用程序开发的首要考虑事项,但是全面讨论安全 PHP 实践超出了本教程的范围。

为了执行产品安装,将 Web 服务器的 Web 根目录改为 app/webroot,这样做将把可以通过 Web 浏览器访问的代码量减至最少,有助于增强系统的安全性。


检验 1

在浏览器中,访问与 Web 服务器的 Web 根目录相对应的 URL。例如,如果已将 CakePHP 安装到本地主机的 Web 根目录中,则访问 http://localhost;您应当会看到 CakePHP 默认主页。


图 1. 应当看到的 CakePHP 默认主页
应当看到的 CakePHP 默认主页

注意: 如果默认主页看上去更像图 2,则说明 mod_rewrite 并没有按照 CakePHP 所需的方式运行。第一次使用 CakePHP 的用户有时可能会遇到这个问题。


图 2. 外观不正确的主页
外观不正确的主页

以下是一些需要确认的东西。

.htaccess 文件是否正确?

.htaccess 文件应当已出现在 CakePHP 安装目录中。在大多数 *nix 系统中,此文件都是默认隐藏的。如果没有该文件,请检查下载的源文件或从 CakePHP.org 获得最新更新。通过访问安装目录并运行 cat .htaccess ,确认该文件是否存在且有效。这将显示该文件的内容,其内容应当类似于清单 4。


清单 4. 确认 .htaccess 文件是否存在

					
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>
                

?

是否为服务器启用了 mod_rewrite?

确保为 Web 服务器启用 mod_rewrite 。对于 Apache,httpd.conf 文件中应当会出现两个不同的行。在 LoadModule 列表中,您应当会看到下面一行(或极为类似):LoadModule rewrite_module libexec/mod_rewrite.so 。在 AddModule 列表中,您应当会看到这一行(或极为类似):AddModule mod_rewrite.c

如果您在 httpd.conf 文件中找不到这两行,则 mod_rewrite 未启用。请查阅服务器文档以获得如何解决此问题的详细信息。

Ubuntu下启用mod_rewrite的方式是:

cd /etc/apache2/mod-available/
sudo a2enmod rewrite
sudo /etc/init.d/apache2 reload
?

?

服务器是否允许 .htaccess 覆盖?

确保将 Web 服务器配置为允许 .htaccess 覆盖。对于 Apache,每个目录都应在 httpd.conf 文件中定义。这些定义可能因为安装的不同看上去有所不同,但应当仍会在定义中看到 AllowOverride All 一行。定义可能类似于清单 5。


清单 5. httpd.conf 文件中的定义

					
   <Directory "/webroot">
       Options Indexes MultiViews
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
                

?

有关 .htaccess 覆盖的更多信息,请参阅服务器文档。


配置数据库连接

既然已经安装了 CakePHP,并已与 Web 服务器关联了起来,就需要把 CakePHP 引入数据库。本节介绍如何设置数据库配置和检验 CakePHP 是否接受这个数据库。Tor 需要一个位置来保存其用户和产品数据。然后要创建一个 users 表,该表用于构建 Tor 的登录和注册部分。


编辑数据库配置文件

设置数据库配置十分简单,但在开始之前,要确保数据库服务器处于运行状态,确保已经为应用程序创建了数据库,并确保拥有一个用户的用户名和密码(这个用户具有对数据库进行操作的权限)。

首先,制作 app/config/database.php.default 文件的一个拷贝并将其保存为 app/config/database.php。这样做是为了保留一个原始模板的拷贝。在您喜欢的文本编辑器中打开该文件并查找以下部分(它应当非常接 近该文件的底部)。


清单 6. app/config/database.php.default 文件

					
var $default = array(
                'driver' => 'mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'user',
                'password' => 'password',
                'database' => 'database_name',
                'prefix' => ''
        );
                

?

根据自己的情况修改以下信息:

driver
此字段可以是 mysqlmysqlipostgressqlitemssqldb2oracleadodbpear-drivername 。本教程假定它是 mysql
persistent
此字段告诉 CakePHP 是否应当使用持久的数据库连接。有效值是 true 或 false。本教程假定它是 false。
host
这是数据库服务器的主机名,例如 localhostmysql.yourdomain
login
这是用于数据库登录的用户名,比如 dbuser
password
这是用于数据库登录的密码,比如 secretsecret
database
这是希望使用的数据库的名称,比如 cakedev
prefix
前缀是一个字符串,比如 cp_ ,它是 CakePHP 执行的任何数据库调用的表名前缀。如果数据库由多个应用程序共享,而又要保证在两个或多个应用程序需要使用具有相同名称的表时(比如 users )表不会相互覆盖,那么就有必要使用前缀。

请不要忘记保存文件。

可以在 database.php 中指定任意数目的数据库配置,只要这些数据库配置具有不同的名称。可以指定应用程序应当在模型中使用哪个数据库配置。

关于数据库和 CakePHP 的一些注意事项:

  • 表必须具有名为 id 的主键。
  • 如果表中包含 createdmodified 列,CakePHP 就会在适当的时候自动填充字段。
  • 表名应该为复数(users、products、eggs、sodas、winners、losers)。其相应的模型将具有单数的名称(user、product、egg、soda、winner、loser)。
  • 如果要将表关联起来,外键应当采用 table_id 格式,且使用单数的表名。例如,user_idproduct_idegg_idsoda_idwinner_idloser_id 是表的 user、product、egg、soda、winner 和 loser 的外键。

检验 2

返回到用于检验初始安装的 URL。应当会看到 CakePHP 默认主页已经改为显示数据库配置的状态。


图 3. CakePHP 默认主页改为显示数据库配置的状态
CakePHP 默认主页改为显示数据库配置的状态

如果默认主页指出数据库配置文件不存在,则您可能将其放在了错误的位置或者其名称不正确。确保数据库配置文件为 app/config/database.php。如果默认主页指出 CakePHP 无法连接数据库,那么确认输入的连接信息是否有效,然后重试。


创建应用程序表

现在,CakePHP、Web 服务器和数据库都关联到一起了。开始动手实践吧!Tor 需要一个 users 表。

这个表将包含识别用户和与用户交互所需的基本信息。简单的用户名和密码字段可能就够了,但其他信息也可能有用,例如电子邮件地址(用于发送 密码重置请求)、名字和姓氏(用于个性化服务)以及最后一次登录的日期(用于帮助跟踪不活动的帐户)。您可能希望用户名和电子邮件字段是惟一的。另外,不 要忘记主键 ID 字段。创建表的 SQL 可能类似于清单 7。


清单 7. 创建表的 SQL

					
CREATE TABLE 'users' (
'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'username' VARCHAR( 40 ) NOT NULL ,
'password' VARCHAR( 40 ) NOT NULL ,
'email' VARCHAR( 255 ) NOT NULL ,
'first_name' VARCHAR( 40 ) NOT NULL ,
'last_name' VARCHAR( 40 ) NOT NULL ,
    UNIQUE (
        'username' ,,
             'email'
		)
) TYPE = MYISAM ;
                

?

注意,usernamepasswordfirst_namelast_name 字段最多包含 40 个字符。在 user 模型中将强制要求不超过这个字符长度。在本例中,40 个字符的最大长度完全是任意设定的。

  相关解决方案