我很高兴地宣布Zend_ViewEnhanced和Zend_Layout组件现在位于ZendFramework核心中。有了这两个组件,您现在可以相对轻松地为您的应用程序创建一些真正复杂的视图。
这两个组件处理几个与视图相关的任务:
- 布局或两步视图
- 部分(查看具有自己可变范围的片段脚本)
- 占位符(存储数据和/或标记以供以后检索)
- 动作(调度控制器动作)
那么,有什么大不了的?我听到一些人说,即使不是全部,也有很多已经成为可能。嗯,是的,从技术上讲是这样;事实上,除了布局之外,所有这些都是通过添加额外的视图助手来完成的,任何人都可以编写(事实上,有些人已经这样做了)。但是,通过将这些作为库的标准部分,现在有执行这些任务的标准方法——这意味着应用程序之间的一致性。
此外,这些助手只会让事情变得简单得多!
例如,谁记住了所有的DOCTYPE声明?我个人知道所有的类型,但不能说出与每种类型相关的全部声明来挽救我的生命。使用doctype()助手,我所要做的就是:
<?= $this->doctype('XHTML1_TRANSITIONAL') ?>
它现在出现了。此外,通过将它放在我的布局的顶部,当我在headScript()
帮助器中显示我的脚本时,它们现在将被正确地转义为XMLCDATA,作为需要了解DOCTYPE的帮助器现在从那个助手那里确定这个信息。
说到headScript()
助手,它非常方便。假设您有一个需要javascript的应用程序。无需为每个控制器无条件地指定javascript包含,或设置复杂的逻辑来确定何时包含它,您可以让您的应用程序视图指定它是需要的:
<?php $this->headScript()->appendFile('/js/foo.js') ?>
然后,在您的主布局脚本中,您告诉它包含任何聚合的脚本:
<?= $this->headScript() ?>
您可以类似地指定提要(通过headLink()
)、样式表(通过headLink()
用于外部文件、headStyle()
用于内联样式表),甚至您的标题元素(例如,您可以聚合各种面包屑,然后指定在它们之间使用的自定义分隔符)。
这只是冰山一角。使用占位符、部分、动作和普通视图助手的组合,您可以使用最少的标记创建一些相当复杂的布局。例如:
<?= $this->doctype('XHTML1_TRANSITIONAL') ?> <html> <head> <?= $this->headTitle() ?> <?= $this->headMeta()->setIndent(8) ?> <?= $this->headLink()->setIndent(8) ?> <?= $this->headStyle()->setIndent(8) ?> <?= $this->headScript()->setIndent(8) ?> </head> <body> <?= $this->partial('header.phtml') ?> <div id=\"content\"> <?= $this->layout()->content ?> </div> <?= $this->subnav() ?> <?= $this->partial('footer.phtml') ?> <?= $this->inlineScript() ?> </body> </html>
上面的示例使用了几个占位符(doctype
、HeadTitle
、HeadMeta
、HeadLink
、HeadStyle
、HeadScript
和InlineScript
)、twopartials(用于页眉和页脚)、布局内容和自定义视图助手(用于导航);整个内容不到20行,但包含您网站布局所需的一切。
这些新组件的功能不仅广,而且深,不是一篇博文所能涵盖的。在接下来的几周内,在ZendDeveloperZone上寻找详细介绍它们的系列教程。同时,您可以阅读ZFsubversion存储库中提供的文档。