为什么使用zend表单装饰器而不是单独渲染?

时间:2012-05-29 19:00:45

标签: zend-framework zend-form

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

让我举两个例子:

  1. 您想在任意表单元素旁边添加一个工具提示图标,其中包含一个漂亮的图标和一个精美的JavaScript悬停框。
  2. 元素应在输入数据时直接验证,方法是发布AJAX请求并在成功时添加绿色复选标记或在元素旁边添加失败时的红叉图标。
  3. 使用装饰器,您现在可以将添加的功能的逻辑与底层元素的逻辑分开,因此您可以使用相同的代码将工具提示和/或实时验证功能添加到文本框元素以及任何其他元素元素只需将所有装饰器添加到元素中即可。

    Zend Framwork的首席开发人员Matthew Weier O'Phinney也发表了一篇很棒的文章,对使用装饰器的动机以及大量例子给出了一些背景见解:Decorators with Zend_Form