2011-10-31 75 views
1

内部错误,我想呈现以下标记:如何使用Zend的形式装饰渲染我的段落标记包装标签和输入

<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> 

我在做什么错?

回答

1

找到了!我愚蠢的错误。我只在浏览器中检查了最终的渲染输出。我正在使用一个也加载JavaScript的模板,这改变了创建不需要的结果的DOM。

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

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')) 
      ))); 
+0

这将不起作用,因为两个HtmlTag装饰器具有相同的别名'内容',所以最后定义将被使用。 – Fino