理解Zend 框架(1):构建完美的阅读器
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 提要的页面。
使用户能够打印帖子集合。