Zend Framework 1.10.1 理解和使用 Zend 表单装饰器之四:呈现独立装饰器

在前面一节,我们看到了你如何通过合并装饰器来产生复杂的输出。我们注意到,使用这种办法你有很多的可扩展性,但是它也加深了复杂性。在这节中,我们会检查如何呈现个人的装饰器,来制造表单和/或个人元素的定制标记(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 元素,同时展示如何为合成的元素创建一个定制的元素以及装饰器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值