【问题标题】:why use zend form decorators instead of individually rendering?为什么使用 zend 表单装饰器而不是单独渲染?
【发布时间】:2012-05-29 19:00:44
【问题描述】:

我几乎走到了尽头,试图使用装饰器来设计我的 Zend 表单。以前为了避免这些问题,我会创建一个扩展 zend_form 的表单脚本,添加我需要的任何验证器、标签等,然后使用 $form->getElement('my_form_element'); 从我的视图脚本中检索元素
这样我就可以在元素周围包裹我想要的任何 css 标签。我想我应该学习如何使用内置的装饰器,但我开始觉得这是在浪费我的时间。我的旧方法似乎更容易,我看不到有什么原因可以更好地使用自定义装饰器吗?

【问题讨论】:

  • 不要花太多时间在装饰器上,ZF2 中有一个全新的 Zend_Form 系统,它们已经脱离了装饰器,转而使用 viewHelpers。希望它会更容易。
  • 值得注意的是,如果您使用<?= $form->getElement('my_form_element') ?>,那么您将隐式使用附加到元素本身的装饰器(如 ViewHelper、Label、Description、Errors 等)。当然,如果你更深入地挖掘元素本身的更细粒度的组件——比如$elt->getLabel()——那么你真的在避免使用装饰器。尽管如此,我发现除非我创建自定义视图助手来渲染表单元素,否则我的自定义表单渲染视图脚本中有很多重复的样板标记,否则使用装饰器会变得干燥。

标签: zend-framework zend-form


【解决方案1】:

一般来说,装饰器用于动态添加功能,而无需触及代码的核心功能并更好地重用代码。然而,在Zend_Form 中,我认为装饰器系统(以及一般的Zend_Form)是不直观且过度设计的,因此它与它应该做的完全相反:帮助开发人员创造更好和更多直观的代码更快。

在我看来,Zend_Form_Decorator 的使用仅在您计划在整个项目中针对多种不同类型的元素重用某些扩展逻辑的情况下才有意义。

让我举两个例子:

  1. 您想在带有漂亮图标和精美 JavaScript 悬停框的任意表单元素旁边添加一个工具提示图标。
  2. 应在输入数据时直接验证元素,方法是发布 AJAX 请求并在元素旁边添加成功的绿色复选标记或失败的红色十字图标。

使用装饰器,您现在可以将添加功能的逻辑与底层元素的逻辑分开,因此您可以使用相同的代码将工具提示和/或实时验证功能添加到文本框元素以及任何其他元素只需将所需的所有装饰器添加到元素即可。

还有一篇来自 Zend Framwork 的首席开发人员 Matthew Weier O'Phinney 的精彩文章,它提供了一些关于使用装饰器的动机的背景知识以及大量示例:Decorators with Zend_Form

【讨论】:

  • 我团队中非常有经验的开发人员仍然不完全理解这些装饰器。这更像是一个反复试验的过程,希望它看起来像你希望它在某个点上看到的那样! (我们在 ZF1.12 中还有很多遗留代码)。
【解决方案2】:

如果您的表单有特定的可重复标记,装饰器可以派上用场,例如,如果您想使用 Bootstrap。除此之外,特别是如果你有一个好的 html/css 人,我会避免他们。

【讨论】:

    猜你喜欢
    • 2011-01-24
    • 2012-04-15
    • 2011-01-10
    • 2011-11-05
    • 2012-04-18
    • 2012-10-23
    • 2011-07-13
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多