在前面一节,我们看到了你如何通过合并装饰器来产生复杂的输出。我们注意到,使用这种办法你有很多的可扩展性,但是它也加深了复杂性。在这节中,我们会检查如何呈现个人的装饰器,来制造表单和/或个人元素的定制标记(markup)。
一旦你已经注册了你的装饰器,你可以稍后通过从元素中得来的名字检索他们。让我们复习一下之前的例子:
如果我们想扒下并只呈现 SimpleInput 装饰器,我们可以使用 getDecorator() 方法来这样做:
这实在简单,但是它可以更简单;让我们用一行来完成它:
不算太糟,但是仍然有一点复杂。为了使这更简单,在1.7版本中引入了一个简略的标记法:你可以通过调用一个 renderDecoratorName() 格式的方法来呈现任何已经注册的装饰器。这将有效的执行上面你所看到的代码,但是使 $content 参数变得可选,以及简化了用法:
这是一个干净的戏法,但是你如何以及为什么要使用它?
许多开发者和设计者对他们的表单有十分精确的标记(markup)要求。他们宁愿对输出拥有全部的控制权,而不是依赖一个可能或不可能迎合他们设计的自动化的解决方案。在其它个案中,表单的模板可能要求大量的专门的标记(markup)——组合任意的元素,除非一个特定的链接被选择,否则使某些东西可视,诸如此类。
让我们利用这个功能来显示个人的装饰器,从而创建一些专门的标记(markup)。
首先,让我们定义一个表单。我们的表单将会采集一个用户的人口统计学的资料。标记(markup)将会高度定制化,为了达到它的目的,在某些情况下,直接使用视图帮助器,而不是表单元素。这里是它的基本表单定义:
注意:此时我们不定义任何的验证器或者过滤器,因为他们和现在讨论的装饰器没有关联。在现实场景下,你应该定义它们。
通过上面不同寻常的办法,让我们考虑我们将如何显示这个表单。对于名(first name)/姓(last name)一个通常的习惯是用单独的一行来显示它们;当提供一个称号的时候,它经常也在同一行。出生,当不使用一个 JavaScript 日期选择器的时候,将经常的被分割成三个字段并排显示。
让我们使用这个功能逐个呈现一个元素的装饰器来完成它。首先,让我们注明没有为给出的元素定义明确的装饰器。作为一个刷新器,对于大部分的元素而言,默认的装饰器是:
- ViewHelper:使用一个视图帮助器来呈现一个表单 input
- Errors:使用 FormErrors 视图帮助器来呈现验证错误
- Description:使用 FormNote 视图帮助器来呈现元素描述(如果有的话)
- HtmlTag:用一个 <dd> 标签包围上述的三个项目
- Label:使用 FormLabel 视图帮助器呈现元素 label(把它包围在一个 <dt> 标签中)
同时,作为一个刷新器,你可访问一个表单的任何元素,仿佛它是一个类的属性;通过你赋值给它的名字来简单的引用这个元素。
我们的视图脚本然后可能看起来会象这样:
如果你使用上面的视图脚本,你会大概得到以下 HTML(大概,因为下面的 HTML 已经被格式化):
事实上它可能不漂亮,但是用了一些 CSS,它可能会被改造成和你想看到的一模一样。主要的一点,然而,即是这个表单使用了差不多完全定制的标记(markup)生产出来,同时对大部分的普通标记(markup)仍然利用了装饰器(为了确保从 html 标签脱离和不发生值注入)。
本教程到这现在为止,你应该对使用 Zend_Form 的装饰器的标记能力感到适应一些了。在下一节中,我们会改正从上面得到的 date 元素,同时展示如何为合成的元素创建一个定制的元素以及装饰器。
分享到:
相关推荐
1. 更直观的界面:所有的菜单、选项和提示都以中文呈现,易于理解和操作。 2. 支持中文文件名:对于包含中文字符的文件或目录,SVN能够正确处理和存储。 3. 更好的协作:团队成员可以更顺畅地交流,因为版本控制系统...
libzip的源代码和文档都是开放的,开发者可以通过阅读源码和官方文档深入理解其内部机制,以便更好地利用这个库。 总的来说,libzip库在1.10.1版本中不仅保持了原有的强大功能,还进一步优化了安全性、性能和易用性...
赠送jar包:parquet-column-1.10.1.jar; 赠送原API文档:parquet-column-1.10.1-javadoc.jar; 赠送源代码:parquet-column-1.10.1-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
标题中的"synergy1.10.1.rar"是一个压缩包文件,其版本号为1.10.1,通常这种格式的文件是使用RAR压缩算法打包的,它可能包含了软件安装所需的所有文件。RAR是一种常见的文件压缩格式,由WinRAR软件创建,允许用户将...
2. **解析器**:Heritrix支持多种解析引擎,如HTML解析器和XML解析器,用于提取和理解网页内容。解析器可以识别出链接,以便进一步抓取,也可以处理JavaScript和其他动态内容。 3. **存储器**:抓取到的数据会被...
HDF5(Hierarchical Data Format 5)是一种用于存储和管理大量复杂数据的开源文件格式。...对于开发者来说,理解和掌握HDF5的使用可以极大地提高数据处理和分析的效率,特别是在处理大规模科学数据或深度学习模型时。
《jQuery UI 1.10.1 自定义版本详解》 jQuery UI 是一个基于 jQuery JavaScript 库的可扩展用户界面库。...通过理解其核心特性、组件和自定义方法,开发者可以更好地利用这一库来提升项目的用户体验。
赠送jar包:parquet-hadoop-1.10.1.jar 赠送原API文档:parquet-hadoop-1.10.1-javadoc.jar 赠送源代码:parquet-hadoop-1.10.1-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Poco库的强大之处在于它的模块化设计,每个功能模块都可以独立使用,也可以组合起来解决更复杂的问题。例如,Poco::Net模块可以用来处理HTTP请求和响应,Poco::XML可以解析和操作XML文档,Poco::Data则提供了SQL...
标题"PyVISA-1.10.1_pyvisa_pyvisaSCPI_Pyvisa1.10.1_"暗示了我们讨论的是PyVISA的1.10.1版本,同时提到了与`pyvisa`和`pyvisaSCPI`相关的元素。`pyvisa`是PyVISA的核心库,而`pyvisaSCPI`则是针对基于SCPI...
jQuery 1.10.1是该库的一个重要版本,虽然现在已经有更新的版本,但1.10.1仍然在很多项目中被广泛使用,它的稳定性和兼容性得到了充分验证。 1. **基本用法**: jQuery的使用通常始于一个熟悉的$(document).ready...
**libpcap 源码安装详解** libpcap 是一个强大的开源库,主要用于网络数据包...通过理解其工作原理和API,开发者可以创建各种自定义的网络监控解决方案。正确安装和使用libpcap,有助于提升网络运维的效率和安全性。
VSCode 1.10.1绿色版让用户能够在不干扰现有系统设置的情况下运行和使用这个编辑器,这对于共享电脑或在受限环境下的开发者尤其方便。 **核心特性** 1. **多语言支持**:VSCode内置了对JavaScript、TypeScript、...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理软件项目的源代码和其他文件。它允许开发者在团队中协作,跟踪每一次更改,同时提供回溯和恢复功能。SVN1.10.1是Subversion的一个特定版本,包含了若干增强...
这个"apache-ant-1.10.1"压缩包包含的是Ant的1.10.1版本,它是对早期版本的更新,提供了一系列改进和新特性。 Ant的核心是一个基于XML的任务驱动系统,它通过XML文件(通常称为build.xml)来定义构建过程。这个XML...
Tensorflow-1.10.1-源码 Tensorflow-1.10.1-源码 Tensorflow-1.10.1-源码 Tensorflow-1.10.1-源码 Tensorflow-1.10.1-源码 Tensorflow-1.10.1-源码 Tensorflow-1.10.1-源码 Tensorflow-1.10.1-源码 Tensorflow-...
《jQuery UI 1.10.1:构建交互式网页的强大工具》 jQuery UI 是一个基于 jQuery JavaScript 库的开源项目,它提供了丰富的用户界面组件和交互效果,为开发者提供了构建功能丰富的、交互性强的网页应用的强大支持。...
《jQuery 1.10.1:开源代码与jQuery UI 1.10.1定制》 jQuery,作为一款广泛使用的JavaScript库,以其简洁的API和强大的功能深受开发者喜爱。1.10.1版本是jQuery历史上的一个重要里程碑,它在前一版本的基础上进行了...
Numpy是Python编程语言中的一个核心库,专用于科学计算,尤其在处理多维数据时。这个"numpy-1.10.1.zip"文件是一个包含Numpy 1.10.1版本源代码的...正确安装和理解Numpy的特性是提升Python编程效率的关键步骤之一。