php培训:构建样例应用程序(四)
操作方法
- 01
executeIndex 操作十分简单:检索 posts 并使其对视图可用。executeRead 操作也十分简单:获取 post ID、检索 post 并使 post 数据对视图可用。executeWrite 操作将从请求中获取标题和文本并将数据保存到数据库中,返回已经保存的 post 的 ID。 有关语法和结构的详细信息,请查看 代码下载 中的 post/actions/actions.class.PHP。现在控制器已经完成,可以接着构建视图。 构建视图 post 视图将位于 /column/protected/sf_column/apps/blahg/modules/post/templates 中。您需要三个视图:indexSuccess.php、readSuccess.php 和 writeSuccess.php(xxxxSuccess.php 命名约定是必须遵守的 symfony 约定)。 这些视图不会像 Zend 视图一样呈现成完全的 HTML 文档。symfony 提供了一个默认的布局模板(在 apps/blahg/templates/layout.php 中),该模板提供了 HTML 页面的基本页头和页尾。您需要提供的全部内容是视图的中间部分 —— 操作的具体内容。例如,indexSuccess.php 只需要循环并设定所提供的 posts 数组的格式,readSuccess.php 只设定 post 内容的格式,而 writeSuccess.php 将在 post 被提交后显示表单或输出成功消息。 如果创建或安装过程一切正常,您应当能够通过转到 http://localhost/symfony/post 访问 symfony 版本的 Blahg(假定所有内容都安装在本地)。 现在您已经了解了 Blahg 如何在 Zend 框架和 symfony 中整合。已经在两个框架中构建了 Blahg,还剩最后一个框架。 在 CakePHP 中构建 Blahg 开始在 CakePHP 中构建 Blahg 之前,必须先创建一些文件。然后设置数据库连接并让 Bake 接管。 设置文件结构 看一看 /column/protected/cakephp/ 目录。您应当会看到四个目录:application(保存应用程序的目录)、cake(包含 Cake 的核心文件的目录)、docs(自述文档)和 vendors(放置可能使用的第三方库的位置)。还有两个文件:index.php 和 .htAccess。仅当您在 Webroot 中安装 CakePHP 时才会使用这两个文件。通常,这不是明智的做法,因为它允许使用 Web 浏览器的任何人访问应用程序的所有文件。 安装的首选方法是使 /column/protected/cakePHP/app/Webroot 成为 Web 服务器的根目录。等效的可行方法(且为本系列的首选方法)是把 /column/protected/cakephp/app/webroot 的内容复制到 Web 可访问的目录(在本例中为 /column/htdocs/cakephp)中。继续并立即执行该操作。 当您复制完文件之后,需要打开 /column/protected/cakephp/app/webroot/index.php 并作一些编辑:需要更新 ROOT 和 APP_DIR 的现有定义。它们应当类似清单 4。 清单 4. ROOT 和 APP_DIR 的定义 if (!defined('ROOT')) { define('ROOT', DS . 'column' . DS . 'protected' . DS . 'cakephp'); } if (!defined('APP_DIR')) { define('APP_DIR', 'app'); } 您可以继续构建,但是您也可以输入数据库信息并用 CAKE_SESSION_STRING 的惟一值更新 core.php。 在 /column/protected/cakephp/app/config/ 中,为 database.php.default 创建一个名为 database.php 的副本,然后输入系统的主机、登录名、密码和数据库名称。另外,在 /column/protected/cakephp/app/config/core.php 中,将 CAKE_SESSION_STRING 的定义更改为包含一个新值,例如 define('CAKE_SESSION_STRING', 'He had a Subbuteo player in his hair. I got distracted.');。 您已经完成了预备工作。现在可以开始享用 CakePHP 了。 总结:像 symfony 一样,CakePHP 提供了自动生成代码功能来基于数据库提供 CRUD 功能。CakePHP 还提供了可以提供类似服务而无需生成任何代码的 scaffolding。这两个功能都能帮助您快速集中获得应用程序的基本信息,但是如前所述,在此环境中使用这些功能将不会给您提供在 CakePHP 中构建应用程序的太多感受。