Zend表装饰器麻烦

时间:2010-01-25 12:47:58

标签: zend-framework zend-form decorator

如何使用表单元素的表单装饰器实现以下功能:

<dt>
  <ul>
    <li>The errors</li>
    <li>The errors</li>
  </ul>
  <label>The label</label>
</dt>
<dd>
  <input type="text" value="The input field">
</dd>

换句话说,我想要在Label之前添加前缀,而不是在输入字段之后附加的错误。我但是想要保留<dt><dd>标签,如上图所示。

2 个答案:

答案 0 :(得分:5)

好吧,我发现了怎么做。渐渐地,装饰者开始对我有意义了:

$decorators = array(
 'Label',
 array( 'Errors', array( 'placement' => 'prepend' ) ),
 array( array( 'dt' => 'HtmlTag' ), array( 'tag' => 'dt' ) ),
 array( array( 'ddOpen' => 'HtmlTag' ), array( 'tag' => 'dd', 'openOnly' => true, 'placement' => 'append' ) ),
 array( 'ViewHelper' ),
 array( array( 'ddClose' => 'HtmlTag' ), array( 'tag' => 'dd', 'closeOnly' => true, 'placement' => 'append' ) )
);

这是做什么的:

  1. 首先渲染标签
  2. 然后前置(默认=追加)错误
  3. 自动换行(默认)HtmlTag(dt)
  4. 中的所有先前内容
  5. 接下来,追加(默认=换行)开场HtmlTag(dd)
  6. 然后追加(默认)ViewHelper
  7. 接下来,追加(默认=换行)结束HtmlTag(dd)
  8. 然后设置装饰器:

    // be sure to only set them, after you have added the relevant elements to the form
    $this->setElementDecorators( $decorators );
    

    <强> PS:
    请注意,虽然我的特定示例生成invaliid html。 ;-)我后来才发现<ul>元素不允许<dt>元素与DOCTYPE HTML 4.01 strict

答案 1 :(得分:0)

在表单类中,试试这个:

$this->setElementDecorators(array(
    'Errors',
    'ViewHelper',
    'Label',
));