PHP4于周五正式死亡。我开始使用4.0.0的候选版本编写PHP,同时向我介绍了GNUC编译器和工具集。我使用PHP的第一份正式工作是在一家使用PHP3的商店,考虑到升级到PHP4的成本——这显然比其前身提供了许多好处。四年前,当第一个正式版本发布时,我立即转向了PHP5——对象引用处理的痛苦、统一构造函数的引入、对重载的一流支持以及SimpleXML立即征服了我,我再也没有回头.再见,PHP4;PHP万岁!
我正在庆祝ZendFramework1.6.0的第二个候选版本,它应该会在今天发布。有很多新功能可用,我真的很兴奋。我不打算在这里详细介绍实施细节,而是对版本中一些更大、更有趣的变化进行分类。
道场整合
关于这个我已经写了很多次博客,但是在这个问题上,一张图片胜过一千个字……或几行代码。我将以图片的形式展示这些,因为我仍然需要确定如何以及在何处进行公开演示,所以请耐心等待。第一:
您看到的是使用Zend_Form
(或者,在本例中为Zend_Dojo_Form
)生成的表单。它包含四个子表单,每个子表单由一个选项卡表示。(我还创建了一个额外的装饰器来创建第五个选项卡。)表单元素都是Dijit,呈现出共同的外观,并且本身具有各种验证器和功能。
第五个选项卡展示了Dojo的一些有趣功能:ContentPane实际上没有内容,但定义了一个指向服务器上资源的“href”属性。在这个特定的页面上,我定义了一个dojoGrid,它使用ItemFileReadStore
—远程dojo.data
资源的奇特词。我使用Zend_Dojo_Data
来提供它,结果是,当您单击thetab时,以下动态加载:
这些东西现在非常容易实现和创建——这意味着我不再有任何理由为看起来糟糕的表单或不向应用程序添加ajax功能。
在试验Dojo时,我还发现了它的构建工具。代码开发完成后,汇总所有dojo.require
语句、将它们放入构建配置文件并创建用于您的应用程序的层是一项微不足道的任务。这样做具有巨大的性能和带宽优势,并且在用户体验方面可能意味着一个好的应用程序与一个伟大的应用程序之间的区别。稍后我会在博客中详细介绍这一点,但我很兴奋,因为我们正在发布Dojo的完整源代码构建,这种支持将开箱即用地提供给ZF用户。
单元测试基础架构
我之前也写过关于此的博客。我一直在一些个人项目以及与应用程序示例相关的项目中使用Zend_Test_PHPUNit_ControllerTestCase
,我正在为即将进行的一些演示做准备。
没有什么比确保您的整个应用程序(而不仅仅是您的模型)按照您制定的预期工作,并且文档结构符合设计更好的了。这将成为认真的ZF开发人员必备的组件。
验证码支持
验证码已成为大多数网站反垃圾邮件武器库中必不可少的工具。虽然Akismet等工具非常棒,但最好甚至不需要首先将数据发送到Akismet进行处理。
当我们完成1.5.0时,Stas为验证码设计了一个不错的设计,但我们没有时间在发布之前完成它。事实证明这是偶然的,因为从那时起我们已经收到了Figlet和ReCaptcha支持的社区贡献。Zend_Captcha为其中的每一个以及基于GD的图像验证码提供了适配器。您现在可以选择最适合您的网站或无私倾向的;在您的表单中使用它们就像创建一个Zend_Form
元素一样简单。
SOAP支持
从1.0发布之前,Zend_Soap就一直在孵化器中苦苦挣扎。WSDLautogeneration大部分未经测试,并且对于几个用例,完全损坏。此外,我创建了但从未完成测试和记录Zend_Soap_Server
,它是PHP自己的SoapServer
类之上的薄包装。
Alex将Zend_Soap
作为1.6.0的一个项目,并用它做了很多事情。他甚至创建了一个兼容性矩阵,用户可以更新该矩阵以显示WSDL自动发现如何与各种SOAP客户端一起工作——这将帮助我们在未来改进它。
表单改进
自从Zend_Form
在1.5.0中首次亮相以来,已经有许多功能请求和错误提交,我试图在该版本中解决其中请求最多和最关键的问题。有几项改进应该使Zend_Form
的使用更容易和更灵活:
-
能够设置自定义元素或表单错误。您现在可以指定在元素或表单未通过验证时要使用的特定错误消息,以及将其标记为无效。这在验证身份验证时特别有用;当身份验证失败时,您可以将表单标记为无效并指定自定义错误消息。
-
过滤器、验证器和装饰器的延迟加载。以前,这些在添加到元素或表单后立即实例化。现在项目元数据被简单地存储了;只有当项目被检索时它才会被实例化。这在许多方面提供了一些性能改进:如果您不验证表单,则不会加载验证器;如果您不呈现表单,则不会加载装饰器。(注意:过滤器几乎总是被加载,因为每次调用
getValue()
时都会使用它们。)此更改的另一个好处是您可以随时注册插件前缀路径在实际检索插件之前。这应该会减少事件序列的混乱和问题,并为组件提供额外的灵活性。
-
更好的数组表示法支持。贡献者提供了几个补丁,我还重新设计了对象以更好地生成名称和ID;netresult是子表单的无缝数组表示法。
FireBug支持
FirePHP的作者ChristophDorn向ZF提交了一个新组件Zend_Wildfire。Wildfire是一个用于标准化组件间通信通道的项目;FirePHP是与FireFox的FireBug控制台通信的一种实现。Zend_Wildfire
组件由一个日志编写器Zend_Log_Writer_Firebug
和一个分析器Zend_Db_Profiler_Firebug
组成,whichlogs在FireBug中使用的数据库分析信息。总之,这些允许您在浏览器中进行更明智的调试,并且可以补充PHP调试器,例如XDebug和ZendDebugger。
分页支持
如果您曾经需要为您的数据提供分页结果集,请举手-很好,我看到有大量虚拟的手在挥舞。分页是需要经常做的事情,通常需要根据您的数据和站点进行调整,并且每次几乎总是很痛苦。Zend_Paginator旨在使其变得简单。
Zend_Paginator
可以使用任何可迭代的数据集。然后您只需要指定当前页码是多少以及每页要显示多少个结果——它会进行计算,并且当与paginationControl()
帮助程序一起使用时,它甚至会为您提供寻呼机.不再需要手动编写算法。
然后是……
现阶段有太多的改进和功能真的无法计数。我们原本打算让这个版本更小并提供更少的功能,但随着发布时间的临近,我们发现我们手上又多了一个怪物。这个版本有很多令人兴奋的地方——还有很多,更多的东西在未来的版本中。
我们正计划缩短我们的发布周期,以便我们可以在未来提供更频繁和更安全的发布。将此与我们一直在对提案流程进行的改进相结合,您应该会看到来自社区的更多好东西——更频繁!
非常感谢所有贡献者,感谢Dojo团队回答了我的许多问题,感谢我的家人在过去几个月里忍受了我长时间的工作。祝开发愉快!