没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
Page 1 of 18
和
和和
和 Zend Framework 一起成长
一起成长一起成长
一起成长
By Rob Allen, www.akrabat.com
Document Revision 1.3.0
Copyright © 2006, 2007
翻译:
Jason Qi, zft.backupdiy.com
本教程打算介绍用 Zend Framework 写一个基本的数据库驱动的应用程序。
注
注注
注:
::
:本教程已经在 Zend Framework Version 0.9 和 0.9.1 上测试过。它非常有希望和以后的版
本一起工作,但很确定,它不和 0.9 以前的版本工作。(谁还希望用 0.9 以前的版本?译者注)
对于
对于对于
对于 0.9 版的警示
版的警示版的警示
版的警示:
::
:如果你已经下载了 Zend Framework 的 0.9 版,那么你必须编辑
library/Zend/Db/Table/Row/Abstract.php 文件在第一行的开始加上“<”
模型
模型模型
模型-视图
视图视图
视图-控制器
控制器控制器
控制器(
((
(Model-View-Controller )
))
)架构
架构架构
架构
下面是传统的构建 PHP 应用程序的方法:
<?php
include "common-libs.php";
include "config.php";
mysql_connect($hostname, $username, $password);
mysql_select_db($database);
?>
<?php include "header.php"; ?>
<h1>Home Page</h1>
<?php
$sql = "SELECT * FROM news";
$result = mysql_query($sql);
?>
<table>
<?php
while ($row = mysql_fetch_assoc($result)) {
?>
<tr>
<td><?php echo $row['date_created']; ?></td>
<td><?php echo $row['title']; ?></td>
</tr>
<?php
}
?>
</table>
<?php include "footer.php"; ?>
随着时间的推移,当客户不断地有新的需求产生,这种分布于不同地方的基于代码的应用就变
得不可维护。
一种改善应用程序可维护性的方法就是把代码分离成截然不同的三个部分(并且通常分离成不
同的文件):
Page 2 of 18
模型
模型模型
模型 模型是处理被显示的数据的程序。在上面的例子中,它就是”news”的概念。
这样,模型一般来说关心”business”逻辑并从数据库中读取和存储数据。
视图
视图视图
视图 视图包括一些关于显示给用户的程序,通常是 HTML
控制器
控制器控制器
控制器 控制器同模型和视图配合在一起,把正确的数据显示在合适的页面上。
The Zend Framework uses the Model-View-Controller (MVC) architecture. This is used to
separate out the different parts of your application to make development and maintenance
easier.
Zend Framework 使用模型-视图-控制器(Model-View-Controller (MVC))架构。 这个用来
把你的程序分离成不同部分使得开发和维护变得容易。
需求
需求需求
需求
运行 Zend Framework 需要:
• PHP 5.1.4 (或更高)
• Web 服务器支持 mod_rewrite 功能. 本教程采用 Apache。
获取
获取获取
获取 Zend Framework
从这里 http://framework.zend.com/download 下载 Zend Framework,有两种格式.zip 或
者.tar.gz。当前的版本是 0.9.1。对于本教程,你必须使用 0.9 和以上的版本。
目录结构
目录结构目录结构
目录结构
虽然 Zend Framework 没有强求使用一个标准的目录结构,但它的手册还是推荐了一个通用的
目录结构。这个目录结构假设你完全控制 Apache 的配置,然而我们想使它更容易一点,所以
做了一点修正。
建立一个根目录叫做 zf-tutorial。 这个意味着指向程序的 URL 将会是
http://localhost/zf-tutorial。
建立如下的子目录,这些目录将存放程序所需要的文件:
zf-tutorial/
/application
/controllers
/models
/views
/filters
/helpers
/scripts
/library
/public
/images
/scripts
/styles
正如你所看到的,我们已经把我们的程序中的模型、视图和控制器的文件分离到不同的子目录
中。支持的图像,脚本和 CSS 文件被存放在 public 目录下的不同子目录中。下载的 Zend
Framework 文件放在 library 目录下。如果我们还需要其他库文件,都可以放在这里。
Page 3 of 18
把 ZendFramwork-0.9.1-Beta.zip 解压到一个临时目录。所有的文件都包含在一个叫做
ZendFramework-0.9.1-Beta 的目录。把 ZendFramework-0.9.1-Beta/library 中的文件
拷贝到 zf-tutorial/library。在这个目录下,有一个子目录叫做 Zend。
启动文件
启动文件启动文件
启动文件(
((
(Bootstrapping)
))
)
Zend Framework 的控制器,Zend_Controller,被设计支持使用 clean urls 的网站。为实现这
个目的,所有的请求需要通过单一的 index.php 文件,这就是所知的启动文件
(bootstrapper)。这给我们提供了程序中所有页面的中心点并确保运行环境配置正确。我们
用.htaccess 文件来实现这个目的,.htaccess 在 zf-tutorial 的根目录中,内容如下:
zf-tutorial/.htaccess
RewriteEngine on
RewriteRule .* index.php
php_flag magic_quotes_gpc off
php_flag register_globals off
RewriteRule 非常简单并可以翻译为“对任何 url, 重定向到 index.php”。
为安全和稳定起见,我们也在 PHP ini 中做一些设置。虽然这些都已经设置正确,我们还是要
确认一下!注意在.htaccess 中的 php_flag 只工作于 mod_php 下。如果你使用 CGI/FastCGI,
就需要确保 php.ini 配置正确。
然而,对于图像,JavaScript 和 CSS 文件的请求不应该重定向到启动文件,把这些文件放到
public 目录下,我们很容易地通过另一个.htaccess 文件来配置 Apache。这个.htaccess 文件在
zf-tutorial/public 下:
zf-tutorial/public/.htaccess
RewriteEngine off
虽然我们当前的 rewrite rules 不需要太严格,但我们还是在 application 和 library 目录下添加一
些.htaccess 文件用来保护我们的程序:
zf-tutorial/application/.htaccess
deny from all
zf-tutorial/library/.htaccess
deny from all
注意在 Apache 下设置.htaccess 文件,httpd.conf 中的 AllowOverride 必须设置为 All。这些设
置多个.htaccess 文件的主意来自于 Jayson Minard 的文章 “
Blueprint for PHP Applications:
Bootstrapping (Part 2)
”. 我建议大家去读读整个系列文章。
启动文件
启动文件启动文件
启动文件:
::
:index.php
zf-tutorial/index.php 是我们的启动文件,我们从下面的代码开始:
zf-tutorial/index.php
<?php
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Europe/London');
set_include_path('.' . PATH_SEPARATOR . './library'
. PATH_SEPARATOR . './application/models/'
. PATH_SEPARATOR . get_include_path());
include "Zend/Loader.php";
Page 4 of 18
Zend_Loader::loadClass('Zend_Controller_Front');
// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory('./application/controllers');
// run!
$frontController->dispatch();
注意我们没有在文件的结尾放?>,因为它不是必须的并且有个好处是:我们可以防止当多余的
whitespace 发生在?>后面出现难以调试的错误。
让我们过一遍这个文件
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Europe/London');
第几行确保我们能看到我们犯的错误(假定在 php.ini 中的 display_errors 设置为 on),
PHP5.1+要求设置当前时区。显然,你应该选择你自己的时区。
set_include_path('.' . PATH_SEPARATOR . './library'
. PATH_SEPARATOR . './application/models/'
. PATH_SEPARATOR . get_include_path());
include "Zend/Loader.php";
Zend Framework 是这样设计的,所有的文件必须包含在 include path 中。我们也把我们的模
型目录包含在 include path 中,这样我们以后就能很容易加载我们的模型类。一开始,我们必
须 include Zend/Loader.php,这样我们就能访问 Zend_Loader 类,在 Zend_Loader 类中有静
态方法使我们能够加载其他 Zend Framework 类,例如:
Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass 加载已经命名的类。它是把下划线转换成路径隔离符来实现的,并在
最后加上.php 后缀。这样,类 Zend_Controller_Front 将从 Zend/Controller/font.php 加载。如
果你在你的类库里使用相同的命名规则,就可以用 Zend_Loader::loadCass()来加载它们。我
们需要加载控制器类和路由类。
前端控制器用路由类来映射请求的 URL 到正确的 PHP 函数,然后显示页面。为了能使路由工
作,需要解决 URL 的哪一部分是指向 index.php 的路径,这样它就可以在那个点后面寻找 url
元素。这个由 Request 对象完成, 它在自动检测正确的 base URL 方面做的很出色,但如果它
对你的设置不工作,你可以用函数$frontController->setBaseUrl()来 override。
我们需要配置前端路由器,这样它就知道从哪个目录里找出我们的控制器。
$frontController = Zend_Controller_Front::getInstance();
$frontController->setControllerDirectory('./application/controllers');
$frontController->throwExceptions(true);
因为这是一个教程并且我们打算运行一个测试系统。我决定让前端控制器抛出所有发生的异
常。缺省地,前端控制器将捕获它们并把它们存储在“响应”对象所建立的 _exceptions 属性
里。响应对象掌握所有关于响应给 URL 的信息。 这包括 HTTP 头,页面内容和异常。前端控制
器在完成它的工作前将自动发送头和显示页面内容。
这对新学 Zend Framework 的人有点迷惑,仅仅重新抛出很容易,这样异常容易可见。当然,
在一个生产服务器上,你不应当给用户显示错误信息!
终于,我们到了问题的核心并且可以运行我们的程序了:
// 运行!
$frontController->dispatch();
剩余17页未读,继续阅读
cbin1013
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 自动驾驶定位系列教程十:闭环修正.pdf
- HM2333-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- Python实现插入排序算法(源代码)
- 123.cpp
- HM2319-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- modbus4j-3.0.4.jar
- 蒙特·卡罗实验、使用蒙特·卡罗方法计算圆周率近似值.docx
- HM2319A-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- JAVA SpringBoot 集成华为云OBS,多镜像配置settings
- 一个文件共享系统,包括前端文件展示系统和后台管理系统,基于SpringBoot + MyBatis实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0