长期以来,PHP一直被作为一种对于富Web应用程序来说还不够严谨的语言。每个人都知道PHP很普及,也许适用于一次性的小项目,但每个人对框架精英--?例如Spring、Ruby on Rails或者Django--?都赞不绝口。直到最近,这种情况才发生了彻底改变。我们知道,2007年PHP已经有3种主要Web应用程序框架能够扩展这种语言的能力,这3种框架是:Symfony、CakePHP和Zend Framework。它们的开发速度又快又稳定,编用PHP5写的面向对象源代码既完美又易于维护。越来越多的新项目开始使用这3种框架,而这些项目的成功完成又让PHP框架变得更加普及。 现在,PHP Web开发框架的普及率已经超过其他框架(本书可以证明这一点),它们已经成为行业内的主流。本书的目的是尽可能多地收集这些充满活力的框架的相关知识,全面介绍这些框架给编程人员提供的所有功能。 0.1 本书的读者 如果你想看吸血鬼小说,请马上把这本书放回书架。如果你是根本不需要Web界面的汇编程序核心编程人员,那么你对本书可能也不会感兴趣。然而,如果说到要进行某种类型的Web开发,本书就非常有用。这本书比较厚重,介绍了大量主题,为各种类型的读者提供了不同视角。 ●专业PHP Web应用程序开发人员。我们在编写这本书时认为这类人员是第一类人员,这也许是因为我们也是PHP编程人员。这些框架能够提供许多高级功能,从而让我们的工作变得既简单而又充满激情。因此我们试图挖掘和试验不同框架的全部潜能,并全面比较它们以便为你提供方便。 ●想详细了解Ruby on Rails、Django、TurboGears、Struts、ASP.NET或者其他非PHP框架的专家。这些专家不需要为每种框架购买单独一本书,也不是随机选择一两本书,他们可以通过比较现成示例来获得好处。他们可以体会这些框架之间的不同,虽然这些差异有时并不十分明显,也许有一天他们会转而使用PHP。 ●不畏惧某些高级主题的复杂性的学生和PHP初学者。本书是指南,但远不止如此!为了使本书更容易让人接受,我们做了很多努力。本书第一部分是“基础”,介绍了让整个框架(甚至是3个框架)运行的所有知识。第二部分是“常见任务”,足以满足大多数学院课程的需要和个别教育计划。如果决定继续研究其中某个框架,那么可参考本书的剩余部分。 ●通常决定选择哪种技术或者需要进一步理解现有计算机系统和应用程序的项目管理者、分析员或者系统管理员。我们为这类读者特地准备了一个部分(第4部分“比较”),这部分重点比较这3种框架,讨论它们的功能。 ●非Web高级编程人员。例如C++应用程序工程师或者希望广泛探索Web开发世界的数据库专家,他们将发现本书是一个好起点。他们可能对PHP5的面向对象方法、使用框架实现快速构建过程以及它们提供的所有高级功能感到欣喜若狂。同时,比较方法为Web特有问题提供了广泛视角,而且本书的指南也没有过多的琐碎任务。 0.2 比较法 有许多指南和书籍都与本书介绍的框架有关,但使本书与众不同的是我们采用了比较法。我们不仅提供3种高级技术,而且还要通过比较它们如何解决某些问题来指出它们的优缺点,这将为你提供类似指南的实际经历,也将为进一步讨论奠定坚实基础。你还可以对PHP Web框架及其适应性提出自己的观点以满足自己的需要。 激烈的争论是所有Web框架讨论的特点。每个人都有自己喜欢的框架,都想提倡某种框架而反对其他框架。问题是所有Web框架都用于相同目的,只是内部结构不同而已,知道其中一种通常就足以创建Web应用程序,因此很少有人想掌握同一种类型的多个工具,这让比较变得更加困难,因此许多讨论都基于陈腔滥调、个人观点或者不实数据就不足为奇了。 在这种情况下就出现了许多尚未解答的问题:哪种框架最适合我们的特殊目的?哪种框架学习起来最快?哪种框架生产应用程序最快?哪种框架的特性最丰富?我们最喜欢哪种框架?有一种框架比其他框架更好吗?我们反思这些问题,但没有找到可信赖的答案。然而其他开发人员也经常问这些问题,因此我们决定尽力在本书中给出解决方案并与你分享。结果通常令人惊讶。 0.3 本书的结构 本书的主要原则是介绍如何用每种框架完成相同的任务(如果可能,就平行进行),为此要为每种框架重复每个示例。有时解决方案也非常类似,目的就是为了显示这些框架之间的细微差别。但有时一个框架提供唯一解决方案,在这种情况下我们也使用它。本书分为4个部分,循序渐进地介绍PHP框架的复杂性。经验丰富的开发人员可以跳过第一部分,或者只阅读自己需要的相关章节。 0.3.1 基础 第1章:大多数框架最大的困难之一是如何开始使用。第1章将用全面的指南介绍这个问题,它简要介绍Web应用程序框架、它们的结构以及基本的模型-视图-控制器(Model-View-Controller,MVC)模式。我们还提供了所有可用的框架,解释了选择Symfony、CakePHP和Zend Framework进行详细比较的原因。 第2章:介绍安装和配置,提供在Windows、Linux和Mac OS操作系统中安装和配置每种框架、选中的数据库以及Web服务器的指导。在这个阶段会出现许多错误,从而让没有经验的开发人员感到不知所措,因此我们介绍得格外仔细。 第3章:在数据库引擎上安装所有框架之后,第3章将致力于减小关系数据库和面向对象编程之间的差异。它还将介绍如何从框架级别与数据库通信,包括通过模式文件构建对象模型和通过命令行接口直接与数据库通信。 第4章:最后是一些编程。正确配置所有框架并且在最喜爱的环境中运行之后,就可以开始编写第一个应用程序。本书提供的地址簿示例可说明如何使用工具快速有效地开发Web应用程序。 0.3.2 常见任务 第5章:该章重点介绍每个Web开发人员在日常工作中都会使用的标准元素。第一个标准元素是用户输入窗体。首先介绍验证字段这个简单问题,然后介绍如何为满足各种应用程序需要定制窗体,最后介绍如何防止自动窗体提交,也就是使用Captcha。 第6章:发送邮件是几乎所有Web应用程序都需要的另一项常见任务,它主要用于用户注册、发送声明和商业广告。该章将介绍和实现几种邮件引擎:SwiftMailer、CakeMailer、ZendMailer和PHPMailer。 第7章:该章先从理论上深入介绍全文本搜索、常用算法和方法,然后介绍使用主流搜索引擎Sphinx、Lucene和Google Custom Search的实际解决方案。 第8章:对于专业Web开发人员来说,安全问题也很重要。阅读该章之后,你就会知道如何提供安全连接,防止两类最危险的攻击:服务器端XSS注入和客户端跨站点请求伪造(Cross-Side Request Forgeries,CSRF)。最后介绍各种类型的威胁和安全措施。 第9章:本书这一部分最后介绍的问题每个人都知道:如何让Web应用程序在视觉上更吸引人。该章首先介绍如何创建简单的图像库,然后比较框架固有的模板引擎和增件(例如非常流行的Smarty增件)。 0.3.3 高级特性 第10章:这一部分介绍的第一个高级主题是异步JavaScript和XML(Asynchronous JavaScript and XML),也就是AJAX,它让各种功能既有用又令人印象深刻。首先介绍自动完成包含给定数据库字符串的文本字段,第二个示例是以娱乐和赢利为目的的动态弹出窗口,第三个示例则是用于多用户的简单聊天室。 第11章:插件能够提供你需要的高级功能。该章介绍如何创建自己的插件。对于Symfony和CakePHP,可以编写PDF创建工具;但Zend Framework插件的运行方式有所不同,因此我们将结合相应的示例来介绍它。 第12章:Web应用程序不可能单独存在。它们需要与其他Web服务结合,该章将介绍如何做到这一点。该章将讨论两个最常见标准--?REST和SOAP,并提供其用法的示例。 第13章:大多数Web应用程序都有内容管理系统(Content Management System,CMS)。该章介绍如何实现简单的CMS以及如何使用更高级的插件,还将讨论内容管理框架的主题。 第14章:国际化不是最终使用UTF8字符编码。该章介绍如何让网站变成真正的多语言(包括从右到左的语言)网站,讨论用户输入、用于排序算法的排序规则、日期格式以及其他本地化方法。 第15章:“质量”这个单词最能描述该章的重点。测试是Web应用程序开发的重要部分,该章将介绍基本测试,包括使用Selenium测试套件的手动和自动功能测试,以及黑盒测试、灰盒测试和单元测试。 第16章:Web 2.0应用程序将考虑用户,他们能够登录、交互和创建内容。该章介绍验证用户身份和授权他们访问某些功能的安全有效方法,首先介绍基于角色的访问控制(Role-Based Access Control,RBAC)和框架提供的访问控制列表(Access Control Lists,ACL),然后介绍轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)和企业级解决方案。 0.3.4 比较 第17章:这一部分的章节比较少,但很重要。该章介绍如何使用JMeter运行定制的性能测试和加载测试,还提供了我们提出的两个基准测试--?简单CRUD应用程序的吞吐量,更重要的是比较用来创建应用程序的代码行。 第18章:最后一章总结本书介绍的内容。它从编程人员的视角和应用程序质量的角度列出每种框架的利弊,最后还告诉你哪种PHP框架最好。 0.3.5 附录 对于非主流框架我们深感抱歉,因为其中有些真的很好,但我们不得不重点关注这3种主流框架。但我们添加了与CodeIgniter、Lithium和Agavi相关的基本信息和一些代码示例。这些框架虽然很年轻,但很有前途,很可能会获得更大普及。 附录还将提供一些我们感兴趣的Web资源列表供下载和进一步阅读,最后还将提供本书使用的首字母缩写词和技术术语的词汇表。 0.4 源代码 本书提供的源代码用来说明相关章节介绍的方法。你应该能够自由阅读这些代码,不用费劲去理解,为了与这一思想保持一致,所以代码片段尽可能既简单而又包含丰富信息。在本书中我们没有打算打印全部文件的完整程序清单。 然而,本书不会没有运行的完整应用程序。可以从Wrox网站( <>)和// www.tupwk.com.cn/downpage上下载它们,也可以从我们维护的专业网站上下载。这样做的好处是我们可以将所需的全部文件放入一个方便下载的程序包里。更重要的是,可以改编这些示例,让它们适应快速演变的框架的更新版本。 要在Wrox网站上找到源代码,可以定位本书的标题(使用Search对话框或者其中一个标题列表),单击本书详细页面上的Download Code链接,就能下载本书的源代码。网站中包含的代码在本书中通过下面的图标突出显示: 在代码注释中可以找到文件名,如下所示: codesnippet/filename 下载代码之后,需要用压缩工具对它进行解压缩。另外,可以打开Wrox代码主下载页面/dynamic/books/download.aspx,查看适用于本书及其他Wrox图书的代码。 0.5 联系我们 我们努力使这本书通俗易懂、信息量大、没有瑕疵。如果有任何意见或建议,请联系我们。同时,如果你发现有错误,请帮忙告诉我们。关于本书、本书作者及勘误表最新列表的更多信息,请登录我们的网站查询。 如果想请我们喝杯咖啡或者对我们的工作提出批评,请给我们写信,电子邮件地址是web-frameworks-book@googlegroups.com 各位作者的私密联系方式是: Bartosz Porêbski: bartosz.porebski@gmail.com Karol Przystalski: kprzystalski@gmail.com Leszek Nowak: dr.leszek.nowak@gmail.com 0.6 勘误表 我们尽量确保文本或代码中没有错误。然而人无完人,错误总会出现。如果你发现本书中有错误,例如拼写错误或者代码不完美,请反馈给我们,我们将不胜感激。发送勘误表将节省其他读者数小时时间,同时也有助于我们提供更高质量的信息。 要查看本书的勘误表页面,请登录<>,使用Search对话框或标题列表定位标题。 然后在本书的详细页面上,单击Book Errata链接,在这个页面上可以查看Wrox编辑们为本书提交和发布的所有勘误。完整的图书列表,包括到每本书勘误表的链接,请登录查询。 如果你没有在Book Errata页面上发布错误,也可以打开/contact/ techsupport.shtml,完成那里的窗体,将你发现的错误发送给我们。我们将核对这些信息,如果合适,就会给本书的勘误页面发布一条消息,以便在本书再版时修订这个问题。 0.7 要与作者和同行讨论,请加入上的P2P论坛。论坛是基于Web的系统,供你发布与Wrox图书相关的消息和相关技术,以及与其他读者或技术使用者进行交流。论坛还提供订阅功能,如果有新贴发布,它将把你选择的感兴趣的主题用电子邮件发送给你。Wrox作者、编辑、其他行业专家以及其他读者都在这些论坛上。 在<>上,不论是在你阅读本书时,还是在你开发自己的应用程序时,你都能找到许多对你有帮助论坛。要加入论坛,请按下面的步骤操作: (1) 打开,单击Register链接。 (2) 阅读使用的相关条款,单击Agree按钮。 (3) 完成加入所需的信息,以及你愿意提供的可选信息,单击Submit按钮。 (4) 你将收到一封电子邮件,里面的信息将告诉你如何验证账户和完成加入过程。 加入论坛之后,就可以发布新消息,也可以回复其他用户发布的消息,还可以在任何时候阅读Web上的消息。如果想将特定论坛上的新消息用电子邮件发送给你,可以单击论坛清单中论坛名旁边的Subscribe to this Forum图标。 关于如何使用Wrox P2P的更多信息,请阅读P2P FAQ查找论坛软件如何运行相关问题的答案,以及P2P和Wrox图书特有问题的答案。要阅读FAQ,请单击P2P页面上的FAQ链接。