专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » php框架:PHP 框架 第 2 部分: 构建样例应用程序 »正文

php框架:PHP 框架 第 2 部分: 构建样例应用程序

来源: 发布时间:星期一, 2009年1月12日 浏览:2次 评论:0
  本文举例源代码或素材下载

  在本系列 第 1 部分 中我们已经设定了本系列范围并满足了先决条件现在将分别在 3个框架中构建样例应用在接下来几篇文章里将扩展应用、了解不符合常规例外情况、使用 Ajax、集成外部任务等等

  本文将指导您分别在 3个框架中创建样例应用 Blahg您将从头做起了解在 Zend 框架、symfony 和 CakePHP 中开发简单应用基础知识

  您应当已经完成了 第 1 部分该部分介绍了如何安装这 3个框架及使用 3个框架必须满足先决条件如果您还未读过这部分则应立即阅读

  假定您已经了解 PHP、应用设计以及如何在数据库中工作您不需要具有框架使用经验但是您应当已经准备好开始使用框架

  在 Zend 框架中构建 Blahg

  首先创建目录 /column/htdocs/zend 和 /column/protected/zend这些目录将分别保存 Web 可访问文件及 Web 不能访问应用文件在 /column/htdocs/zend 中用以下命令行创建个 .htaccess 文件:

RewriteEngine _disibledevent=> DIRECTORY_SEPARATOR.'column'.DIRECTORY_SEPARATOR.
       'htdocs'.DIRECTORY_SEPARATOR.$sf_web_dir_name.DIRECTORY_SEPARATOR.
       sfConfig::get('sf_upload_dir_name'), ));


  实质上这些行将告诉 symfony 在什么位置查找 web 目录

  现在已经添加了这些行您应当把 /column/protected/sf_column/web 内容移到 /column/htdocs/symfony 中(如果尚未创建请创建此目录)最后个要点是需要修改 /column/htdocs/symfony/index.php 使其知道项目实际根目录位置用下面行替代 SF_ROOT_DIR 现有定义:('SF_ROOT_DIR', '/column/protected/sf_column');

  几乎就要完成了现在只需使用 init 化 Blahg post 模型这意味着要在命令行中运行另条命令:php /column/protected/symfony/data/bin/symfony init-app blahg这条命令像其他命令将构建些文件和目录这次是在 /column/protected/sf_column/apps/blahg/modules/post 中

  现在已经使 symfony 启动并运行是该整合 Blahg 时候了

  注:symfony 提供了自动生成代码功能用于基于数据库提供 Create、Read、Update 和 Delete (CRUD) 功能虽然这可以帮助您快速地集中应用基本信息但是在这种环境下使用它您无法清楚地了解 symfony 应用进行整合方式基于本文学习目您将手动构建应用

  生成模型

  您将使用 posts 表同样是在 第 1 部分 中创建

  由于 symfony 将使用 Propel 来提供对象关系映射 (Object Relational Mapping)因此需要用 symfony 命令行实用来生成模型这要求描述数据库模式并先提供些数据库信息

  注:技术上讲没有必要先提供数据库信息symfony 将根据模式构建模型并且甚至可以使用命令行实用生成 SQL 脚本以根据模式定义创建数据库我们将在后面篇文章中尝试该操作

  对于数据库和模式定义文件symfony 将使用 Yet Another Markup Language (YAML)YAML 不太复杂但是如果您以前从未使用过它则它可能会有些令人迷惑在这个例子中对于 YAML 需要了解到 whitespace 非常重要使用两个空格表示缩进而且绝不使用制表符

  现在将编辑 database.yml 和 schema.yml 文件这些文件位于 /column/protected/sf_column/config 中并且需要编辑 schema.yml 文件来描述 posts 表编辑模式文件以包含下列信息:

  清单 2. 编辑 schema.yml 文件

propel:
 posts :
  _attributes: { phpName: Post }
  id:
  title:    varchar(255)
  text:    longvarchar
  modied: timestamp


  注:由于您可能是复制并粘贴了这段代码请返回查看并确保每个缩进都是两个空格并且未使用任何制表符例如modied 行开头前应当有 4个空格(两个表示 posts 缩进两个表示 modied 缩进)

  应当编辑 database.yml 文件使其包含具体数据库参数该文件看上去可能类似清单 3

  清单 3. database.yml 文件

all:
 propel:
  :     sfPropelDatabase
  param:
   phptype:   mysql
   hostspec:   localhost
   database:   symfony
   username:   frameworks
   password:   fwpw


  这应当不难现在模式和数据库配置已经完成您可以生成模型了返回到先前使用命令行并在 /column/protected/sf_column 中执行以下命令:

php /column/protected/symfony/data/bin/symfony propel-build-model
php /column/protected/symfony/data/bin/symfony clear-cache


  每条命令都将输出大量数据但是重要最终结果是在 /column/protected/sf_column/lib/model 中创建 Post.php 和 PostPeer.php 文件 —— 这些是您模型如果打开这些模型您将看到那里面没有很多内容它们只是扩展了基本模型类

  注:无论何时重新构建模型都必须运行上面 clear-cache 命令

  好!这轮对模型学习已经完成有关模型还有很多内容可说但是接着需要构建控制器

  构建控制器

  您不需要像在 Zend 中样编写 Front 控制器 symfony 已经为您提供了该控制器

  post 控制器实际上将被称为 actions..php 并且将位于 /column/protected/sf_column/apps/blahg/modules/post/actions 中此控制器将为 post 模块处理所有操作像以前您需要 3个操作但是名称区别:executeIndex、executeRead 和 executeWrite(executeXxxxxx 是 symfony 所使用操作命名约定并且必须遵守)

  executeIndex 操作十分简单:检索 posts 并使其对视图可用executeRead 操作也十分简单:获取 post ID、检索 post 并使 post 数据对视图可用executeWrite 操作将从请求中获取标题和文本并将数据保存到数据库中返回已经保存 post ID

  有关语法和结构详细信息请查看 代码下载 中 post/actions/actions..php现在控制器已经完成可以接着构建视图

  构建视图

  post 视图将位于 /column/protected/sf_column/apps/blahg/modules/post/templates 中您需要 3个视图: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/ 目录您应当会看到 4个目录:application(保存应用目录)、cake(包含 Cake 核心文件目录)、docs(自述文档)和 vendors(放置可能使用第 3方库位置)还有两个文件: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 定义

   (!d('ROOT')) {
     ('ROOT', DS . 'column' . DS . 'protected' . DS . 'cakephp');
  }
   (!d('APP_DIR')) {
     ('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 定义更改为包含个新值例如 ('CAKE_SESSION_STRING', 'He had a Subbuteo player in his hair. I got distracted.');

  您已经完成了预备工作现在可以开始享用 CakePHP 了

  注:像 symfony CakePHP 提供了自动生成代码功能来基于数据库提供 CRUD 功能CakePHP 还提供了可以提供类似服务而无需生成任何代码 scaffolding这两个功能都能帮助您快速集中获得应用基本信息但是如前所述在此环境中使用这些功能将不会给您提供在 CakePHP 中构建应用太多感受

  创建表和模型

  如果您没有 posts 表您跳过了第 1 部分中创建 posts 表部分请立即转到相应位置查看并创建该表在 /column/protected/cakephp/app/models 目录中创建名为 post.php 文件该文件将包含模型类定义定义十分简单:类是 Post 并扩展 AppModel并且应当将类变量 $name 设为 post

  所有工作就这么多模型将使用来自 AppModel 所有继承思路方法现在可以接着构建控制器了

  注:您可能已经注意到该表被称为 posts(复数)而模型名称为 post(单数)这是 Cake 重要约定部分模型总是单数而其对应表总是复数

  构建 Cake posts 控制器

  posts 控制器将十分简单像您今天编写其他控制器您将安插几个帮助器然后定义 3个操作:index、read 和 write

  index 操作将获取 posts 列表并使其对视图可用read 操作将获取 post ID检索 post 并使 post 数据可用于视图write 操作用于接受提交(如果有提交操作)并将数据保存到数据库中

  有关语法和结构详细信息请查看 代码下载 中 /column/protected/cakephp/app/controllers/posts_controller.php

  控制器已经完成现在可以接着构建最后几个视图

  构建 Cake 视图

  您需要使用在其他框架中为 Blahg 创建 3个基础视图在本例中您将在 /column/protected/cakephp/app/views/posts 目录中创建 index.ctp、read.ctp 和 write.ctp 文件这些文件只是 CakePHP 将使用模板它们很像您在 symfony 中创建模板请查看代码归档中这些文件视图将充分使用表单和 HTML 帮助器来输出链接和表单元素但是它们看上去应当类似您为 symfony 创建其他视图



  注意视图不会呈现到完全 HTML 文件中默认布局是由 CakePHP 提供这些默认布局文件都是位于 /column/protected/cakephp/cake/libs/views/templates/layouts 中但是不必修改这些文件如果需要更改默认布局请将 default.ctp 布局文件副本放到 /column/protected/cakephp/app/views/layouts 中并根据需要进行修改

  注:使用这些帮助器则 Cake 中表单和链接更易于维护 Cake 将确保链接指向应用正确安装位置或移至其他目录位置并且如果正确设定了表单元素名称格式Cake 将为您完成大部分工作

  根据 Blahg 需求构建视图或者安装 代码下载 中视图假定所有内容均已正确编写并安装您应当能够访问位于 http://localhost/cakephp/posts CakePHP 版本 Blahg(假定已在本地安装)

  结束语

  您完成了很多工作:安装、启动并运行了 3个框架并且在每个框架中创建了个基本应用

  花些时间使用每个框架中 Blahg然后尝试在每个框架中扩展 Blahg尝试编写个 comments 控制器该控制器将允许用户发布对每个 post 回复可是这时还不能把链接注释整合到 posts 中但如果您感觉这样做没问题那就尽管去做吧!在第 3 部分中将为您提供涉及这部分操作些代码



相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: