`

理解 Zend 框架,第 1 部分: 基础

阅读更多
    我们程序员是自相矛盾的懒汉。我的意思是我们会花上数小时甚至几天的时间来创建一个东西,让我们用 30 秒钟完成 5 分钟才能完成的任务。因此,Zend 框架的创建也许不是一件太让人惊奇的事情。您尚未听说过 Zend 框架吗?不要急 —— 您会了解的。本文概要介绍了 Zend 框架,解释了它的一般概念,并为 “理解 Zend 框架” 系列的其余部分做好准备,其余部分将通过遍历一个新的在线 RSS/Atom 提要阅读器的创建过程来深入到该框架的细节之中。在本文中不会有太多编码,但在其余部分中您应该熟悉 PHP。

Zend 框架

众所周知,几年前,在众多强大且易用的脚本语言中,PHP 占据着首要位置。大多数基于 UNIX® 和 Linux® 的 Web 服务器都安装了该语言。如果您是一个程序员,您很容易获得一个主机帐户来使用该语言。Ruby 曾经风靡一时,但现在已经没有多少人使用了。如果您曾经想使用动态生成的内容来构建一个网站,但却并不确定是否要使用诸如 J2EE 之类的应用服务器,那么您就极可能使用 PHP。它快速、易学、方便,您无需学习 Perl。

然后情况很快改变。Ruby on Rails 震惊了编程界。Ruby on Rails 是面向对象和基于模型-视图-控制器 (MVC) 的典范,它提供了一种方式来实现我们都想实现的事情,即不费任何力气地创建一个网站。当然,仍然存在两个问题。一个问题是您需要学习一门新的编程语言。不管这门语言是什么样的,这都不是一项简单的任务。另一个问题是,如果您找到一台能运行 Ruby on Rails 的主机,那是非常幸运的,而大多数情况下不可能。如果您(像我一样)拥有一个 10 年的帐户,仅因为其缺少新的编程语言,那么放弃起来会犹豫再三的。当然,您这些年来编写的所有现有的 PHP 代码也是一个问题。您真的愿意把它们全部扔掉并重新开始吗?当然不是!

一个有进取心的 PHP 程序员需要做什么呢?那就是创建一个囊括大多数上述新优势的新框架。Zend 框架由此诞生了。

Zend 框架提供了简洁稳定的代码,也许最为重要的是,它是在明晰的知识产权下完成的。PHP 正在企业界跑马圈地,但如果您是一家财富 500 强公司,您不会愿意冒险将模块提交给一个也许是属于其他公司知识产权的知识库。

准确地讲 Zend 框架究竟是什么呢?Zend 框架具有以下特征:

    * 是基于 PHP 建立的。
    * 是面向对象的。
    * 使用 MVC 范例。
    * 具有开放源码贡献者。
    * 有贡献者负责保证他们的代码不是他人的知识产权。

通过建立 MVC 模式,Zend 框架的目标是使编程生活更加轻松,这不仅体现在通用领域,而且对您始终想要做的具体的事情也是如此,比如访问数据库或输出 PDF 文件。(也许您一直都不输出 PDF 文件。但如果它更简单的话,我想您会去这样做的。)

Zend 框架组件包括:

Zend_Controller
    此模块为应用程序提供全面的控制。它将请求转化为特定的行为并确保其执行。

Zend_Db
    此模块基于 PHP 数据对象 (PDO) 并提供一种通用方式来访问数据库。

Zend_Feed
    此模块使使用 RSS 和 Atom 提要变得简单。

Zend_Filter
    此模块提供字符串过滤函数,如 isEmail() 和 getAlpha()。

Zend_InputFilter
    对于 Zend_Filter,此模块是用来操作数组的,如表单输入。

Zend_HttpClient
    此模块使您能轻易地执行 HTTP 请求。

Zend_Json
    此模块使您能够轻易地将 PHP 对象转换成 JavaScript 对象符号,反之亦然。

Zend_Log
    此模块提供通用日志功能。

Zend_Mail
    此模块使您能够发送文本文件和多部分 MIME 电子邮件。

Zend_Mime
    此模块被 Zend_Mail 用来解码 MIME 消息。

Zend_Pdf
    此模块用来创建新的 PDF 文档,及加载和编辑现有文档。

Zend_Search
    此模块使您能在现有文本上执行复杂搜索。例如,您可以建立一个搜索引擎,该引擎可以基于相关性或其他因素返回结果。

Zend_Service_Amazon、Zend_Service_Flickr 以及 Zend_Service_Yahoo
    这些模块提供对这些 Web 服务 API 的简单访问。

Zend_View
    此模块处理 MVC 模式的 “视图” 部分。

Zend_XmlRpc
    此模块使您能够轻易地创建 XML-RPC 客户机。(已为将来计划好服务器功能。)

现在来看一下我们的目标和在实现这个目标的过程中将做些什么。




回页首


项目

为了展示 Zend 框架的所有的内幕,需要一个涵盖 Zend 大部分功能的项目。那很好,因为我最喜爱的项目仍然是在线提要阅读器。为什么呢?因为我还未找到一个能够真正实现我想要实现的功能的项目。每当我掌握一门新技术时,我就试着制作一个比我以前用的要更好的提要阅读器。所以我们要创建一个新的在线 RSS/Atom 提要阅读器服务。

这个世界真的需要另一个在线提要阅读器吗?也许。但我不介意我是其惟一的使用者。并且要点是:Zend 框架目标在于使我能用于项目上的东西足够简单。我用它们仅仅是因为我想,而不是因为我花了价值成百上千美元的研究来证明它。那么这个作为新闻管理器的宝贝应该实现些什么呢?目前来讲,它应当具备以下功能:

    * 使用户能够保存提要或订阅的集合。
    * 使用户能够阅读提要和单个条目。
    * 使用户能够保存单个帖子。
    * 使用户能够针对特定的文本来搜索已保存的条目。
    * 使用户能够容易地阅读没有 RSS 提要的页面。
    * 使用户能够打印帖子集合。

在本系列中,我将向您展示如何通过 Zend 框架来实现所有这些功能。本系列包括:

第 1 部分:基础
    本文在总体上解释了这个项目和 Zend 框架。

第 2 部分:添加数据库
    此教程展示如何使用 Zend_DB 模块创建并操纵用来存储订阅信息、已保存条目和其他信息的中央数据库。

第 3 部分:提要
    现在我们把提要加入到这个整体中来,使用户能够创建一个帐户、订阅特定的提要,并显示这些提要。此教程使用 Zend_Feed 和 Zend_Inputfilter 模块,后者用来检验电子邮件地址并去除提要条目中的 HTML 标记。

第 4 部分:当没有提要时:Zend_HTTPClient 模块
    并非所有的站点都有提要,但在同一个地点追踪所有的东西还是有用的。这篇文章展示了如何使用 Zend_HTTPClient 模块来创建代理将数据拖入提要阅读器界面中。

第 5 部分:创建 PDF 文件
    此教程解释如何使用 Zend_PDF 模块来用保存的文章、图像和搜索结果创建定制的 PDF 文件。

第 6 部分:发送电子邮件
    这篇文章解释如何使用 Zend_Mail 模块提醒用户有新的帖子和订阅的提要,甚至使用 HTML 格式的电子邮件发送这些帖子。

第 7 部分:搜索
    这篇文章解释如何使用 Zend_Search 模块针对一个特定的搜索条件搜索现有的和已保存的日志条目,并返回排列好的结果。

第 8 部分:添加相关的信息和服务
    此教程解释如何使用 Zend_Service 模块从其他服务特别是从 Amazon、Flickr 和 Yahoo! 获取信息。此界面将使用 Ajax 从当前日志条目或者用户指定的搜索条件中获取相关的书、照片和搜索结果。

第 9 部分:添加 Ajax
    Zend 框架通过本地 PHP 对象同 JavaScript 对象符号 (JSON) 之间的自动互换使得在应用程序中添加异步的 JavaScript + XML (Ajax) 交互变得简单。这篇文章展示了如何将此功能添加到提要阅读器中,还简单描述了 JSON。





回页首


安装

Zend 框架不需要任何特别的安装,但您需要牢记一些需求。Zend 框架需要 PHP V5,它同 V5.0.4 及以上版本兼容,所以您可以使用而不是必须用 V5.1。但无论如何,您必须确保库目录包含在 include_path 中,Zend 框架将从中寻找其所有的文件。要想这样,请确保在 php.ini 文件中设置 include_path,如:

; Windows: "\path1;\path2"
include_path = ".;c:\php\includes;e:\sw\zendframework\library"


这样就可以了。




回页首


MVC 模式

提到图形设计,我不可能知其不可为而为之,因为这不是我所擅长的。然而,给我一个其他有天赋的人拼凑好的设计,我可以用那个界面完成您想完成的任何事情。因而,能够分解好一个基于网络的应用程序的设计相关的工作是非常有利的,这样,设计人员、编码人员和 DBA 都可以做他们各自擅长的事情。这就是 MVC 模式的实质,它将一个项目分解成三层。

模型-视图-控制器的定义

按照定义,模式是多年演化而来的做事情的方法,因为它们是某一问题的好的解决方案。模型-视图-控制器 (MVC) 模式也不例外。由于具体的创建过程有所不同,所以您偶尔会发现一些定义之间存在差异。例如,一些对 MVC 的定义中将控制器的角色定义成简单地改变状态,其所有的业务逻辑都集成在模型层。最后,惟一重要的事情是,应用程序以最有效的方式完成了您想要它完成的事情。

模型层 由真实数据的表示组成。例如,在我们的提要阅读器项目中,包含了用户、提要和提要条目。它们在数据库中的表示总体上 “建模” 了它们的结构,从而组成了模型层。

视图层 由一些逻辑组成,这些逻辑实际上定义了显示的数据如何表现。它并不决定这些已显示的数据是什么,而仅仅是它们如何表现。理想状态下,该模块不包含任何逻辑,只接受所给信息,并把它们显示出来。

控制器 实际上定义了数据是什么。事实上,控制器是所有逻辑存放的地方。在 Zend 框架中,该层控制了要执行的行为。例如,如果我想要显示单个提要条目对象,那么职责被解析为:提要条目对象具有一个控制器,该控制器定义了当调用显示行为时所发生的事情。该显示行为回调以从模型(或者说是数据库或其他持久性存储器)中获取需要的数据,然后将这些字段 —— 如标题、内容、持久链接等 —— 填入视图中,该视图可以将其简单地显示在浏览器中。

应当承认,对大多数程序员来说,这是一次启程。尽管存在对象,但 PHP 始终是一门过程化的语言。尽管如此,这项交易是绝对值得的。按照 MVC 模式构建应用程序远要比构建一个里面乱成一团的应用程序要简单的多。

现在,让我们来看看您需要做些什么。




回页首


编码准则

当您为 Zend 框架编码,或使用其编码时,您应该遵循特定的准则。这些准则是为了使团队项目变得更加简单而设计的。换句话说,通过定义编码规范,您不仅能避免接下来的问题,而且能够使其他人更容易阅读您的代码。Zend 框架文档中包含几页指导准则,比如:

    * 确保文件整洁。换句话说,在文件头、标准的四格缩进等前面不能有任何前导或者后置的空格,这些空格会调用 Web 服务器导致意外地发送内容。
    * 有且只有当类作为 Zend 框架的一部分时,而不仅仅是使用 Zend 框架时,类名才以 Zend_ 开头。
    * 在函数名中下划线是禁止的。而是使用小写开头大小写间隔的方式(如 getTodaysDate())。
    * 只有当变量是 private 或 protected 类型时,才以下划线开头。
    * 将所有的变量声明为 private、protected 或者 public,而不要使用 var。
    * 使用标准的 PHP 标记(如 <?php ?>),而不是简写方式 (<? ?>)。
    * 确保您的代码易于阅读。换句话说,当使用一个句号 (.) 连接文本时,确保在句号前后加上空格以便于阅读。同理,当声明一个数组时,要在逗号后面加上空格。
    * 如果您必须通过引用传值,那只能在函数声明中这样做。调用时通过引用传值是不允许的。
    * 任何 PHP 文件都必须包括能被 PhpDocumentor 阅读的文档,并且编码准则指定了特定的最少标记。

当然这并不是完整的编码准则列表,但它应能让您对所需要遵循的准则类型有所了解。查看文档了解整个准则列表,以使您的代码会更容易满足使 PHP 项目更易共享的承诺。




回页首


结束语

Zend 框架提供了一种新的、特定于 IP 的方式来构建 PHP 应用程序。因此,Zend 框架旨在改善您的 PHP 编码体验。在本系列中,我们将使用 Zend 框架来构建一个 RSS/Atom 提要阅读器。本系列以后的部分将涵盖数据访问、搜索、Web 服务以及该框架的其他部分。在第 2 部分中,将创建登录系统并开始构建数据库。
分享到:
评论

相关推荐

    理解 Zend 框架(IBM经典中文教程)

    ### 理解 Zend 框架:IBM 经典中文教程详解 #### 一、引言 在软件开发的世界里,程序员们总是希望能够通过工具和技术来提高工作效率,减少重复劳动。随着网络技术的发展和互联网应用的需求增加,PHP 作为一种流行...

    Zend框架入门教程

    - **描述**:这份PDF格式的教程主要面向希望了解和学习Zend框架的开发者,内容基础且实用。 #### 二、框架概述 **标签与部分内容解析:** - **标签**:“Zend框架”表明本文档的主要讨论对象为Zend框架。 - **...

    zend入门知识讲解

    学习和掌握Zend框架的基本知识,不仅可以提升开发效率,还能更好地理解和利用PHP的面向对象特性,从而构建出更稳定、更安全的应用程序。随着对框架深入的理解,开发者可以结合其他开源工具和服务,如数据库管理系统...

    zend完整框架Demo

    3. **MVC模式**:在Zend框架中,Model处理数据逻辑,View负责展示,Controller协调Model和View。开发者需要创建控制器类,定义模型类,并编写视图脚本来实现业务逻辑。 4. **路由与控制器**:`Bootstrap.php`文件是...

    大道PHP:LAMP+Zend+开源框架整合开发与实战(随书光盘源码2).rar

    理解Zend框架的MVC(Model-View-Controller)模式,以及其服务、控制器、模型和视图的交互,有助于提高开发效率。 4. 开源框架整合:除了Zend,书中的实战部分还可能涵盖了其他如Symfony、Laravel、Yii等流行的PHP...

    基于Zend Framework 框架的CMS PHP 源代码

    Zend Framework推崇“选择性使用”原则,开发者可以根据项目需求选择使用其中的部分或全部组件,极大地提高了开发效率和代码质量。 **二、CMS系统的核心功能** CMS系统通常包含以下核心功能: 1. **内容创建与...

    诗意的边缘:PHP顶级框架Zend Framework开发实战-代码

    ** Zend Framework 框架详解** Zend Framework 是一个开源、基于组件的 PHP 开发框架,专为构建可扩展且高性能的 Web 应用程序而设计。它的设计模式遵循了 Model-View-Controller(MVC)架构,使得开发者可以更加...

    zend framework 中文手册

    6. **学习与实践**: 学习 Zend Framework 需要掌握PHP基础知识,了解MVC架构,并熟悉框架中的各个组件及其用法。通过实际项目练习,可以更好地理解和运用框架,提升开发效率。 7. **社区支持**: Zend Framework 有...

    php框架资源

    1. **提高开发效率**:框架提供了一套标准的开发流程和工具,减少了重复编码的工作。 2. **代码规范**:框架遵循一定的编码标准,确保代码的质量和可维护性。 3. **易于扩展**:框架通常支持插件和模块化,方便添加...

    php+mysql直销系统源码,含数据库 zend框架

    开发者可以通过深入研究源码,理解其数据库设计、PHP脚本逻辑以及Zend框架的应用,进一步提升自己的技能,并在此基础上进行二次开发或定制化服务。对于想要涉足直销系统开发的人员来说,这是一个宝贵的参考资料和...

    zendframework3.0框架

    而`composer.json`和`vendor`目录则体现了现代PHP项目中依赖管理的重要性,是理解并有效利用ZF3的关键组成部分。为了实现最佳的开发实践,掌握Composer的使用以及如何与ZF3框架集成是非常必要的。

    zend framework中英文手册.rar

    1. **入门指南**:介绍如何搭建开发环境,创建第一个 Zend Framework 应用。 2. **组件详解**:对每个组件的功能、接口和配置进行详尽解析。 3. **最佳实践**:提供开发过程中应遵循的最佳实践和注意事项。 4. **...

    <大道PHP:LAMP+Zend+开源框架整合开发与实战>源码code

    此外,开源框架的整合开发部分可能涉及其他流行的PHP框架,如Symfony、Laravel或Yii等,介绍它们的特性、优缺点以及与Zend框架的协同工作方式。这有助于开发者根据项目需求选择合适的工具,并能灵活地在不同框架之间...

    《大道PHP:LAMP+Zend+开源框架整合开发与实践》源码

    这里我们将围绕LAMP架构、Zend框架以及开源框架整合开发进行详尽的探讨。 LAMP,即Linux、Apache、MySQL和PHP,是Web开发领域最常用的技术栈。Linux作为操作系统,提供了稳定的基础环境;Apache是流行的HTTP服务器...

    zend--QuickStart第一部分翻译文档

    在 Zend Framework 中,你可以找到如 Zend_Controller、Zend_Layout、Zend_Config、Zend_Db、Zend_Db_Table、Zend_Registry 等常用组件,以及图形辅助工具。 在本快速教程中,我们将通过构建一个简单的数据库驱动的...

    zend framework中文教程

    #### 二、深入理解Zend Framework **重要概念与功能**: - **Zend_Acl**:这部分介绍了访问控制列表(Access Control List)的概念,用于实现细粒度的权限管理。通过注册角色、定义资源、设置访问规则,可以构建复杂...

    PHP zend模块

    Zend Loader 是 Zend 框架的一部分,它允许 PHP 开发者加载和使用 Zend Framework 的组件,而无需安装整个框架。这个模块提供了一种动态加载和卸载 Zend Framework 组件的方法,从而提高了应用程序的灵活性和性能。 ...

Global site tag (gtag.js) - Google Analytics