如何使用zend表单装饰器在段落标记包装标签和输入中呈现错误

时间:2011-10-31 22:09:23

标签: zend-framework zend-form zend-decorators

我想渲染以下标记:

<div class="row">
<p>
  <label>Your Name</label>
  <input type="text" class="text_field" name="name">
  <ul class="errors">
    <li>Waarde is vereist en kan niet leeg worden gelaten</li>
  </ul>  
</p>
</div>

这是我的Zend表单元素+装饰器:

$this->addElement('text', 'name', array(        
            'label' => 'Naam:',
            'class' => 'text_field',
            'required' => true,
            'decorators' => array(
                'ViewHelper',
                'Label',
                'Errors',
                array(array('row' => 'HtmlTag'), array('tag' => 'p')),
                array(array('content' => 'HtmlTag'), array('tag' => 'div', 'class' => 'row'))
            )));

但是这总是将ul列表呈现在p标签下方而从不在内部。它还在列表下方添加了一个额外的p标记。

<div class="row">
  <p>
    <label class="required" for="name">Naam:</label>
    <input type="text" class="text_field" value="" id="name" name="name">
  </p>
  <ul class="errors">
    <li>Waarde is vereist en kan niet leeg worden gelaten</li>
  </ul>
  <p></p>
</div>

我做错了什么?

2 个答案:

答案 0 :(得分:1)

发现它!我的愚蠢错误。我只在浏览器中检查了最终渲染的输出。我正在使用一个模板,它也加载了javascript,这改变了DOM,从而产生了不需要的结果。

所以第一个装饰器设置工作正常。

答案 1 :(得分:0)

尝试执行以下操作:

$this->addElement('text', 'name', array(        
            'label' => 'Naam:',
            'class' => 'text_field',
            'required' => true,
            'decorators' => array(
                'ViewHelper',
                'Label',
                'Errors',
                array(array('content' => 'HtmlTag'), array('tag' => 'p')),
                array(array('content' => 'HtmlTag'), array('tag' => 'div', 'class' => 'row'))
            )));