如何使用 Zend Form Decorator 将所有输入和标签放入 div?

Posted

技术标签:

【中文标题】如何使用 Zend Form Decorator 将所有输入和标签放入 div?【英文标题】:How to put all inputs and label to divs using the Zend Form Decorator? 【发布时间】:2012-04-05 18:23:21 【问题描述】:

我的代码如下:

$this->setElementDecorators(array(
   array('ViewHelper'),
   array('Errors', array('tag' => 'div', 'class' => 'error')),
   array('Label', array('tag' => 'span')),
   array('htmlTag', array('tag' => 'div'))
));

它给了我:

<div>
   <div id="email-label"><label for="email" class="required">First name:</label></div>
   <input type="text" name="email" id="email" value="" />
</div>
<div>
   <div id="email-label"><label for="email" class="required">Last name:</label></div>
   <input type="text" name="email" id="email" value="" />
</div>

但我希望将所有内容都放在具有指定类的 div 中,如下所示:

<div class="item">
   <div class="label"><label for="email" class="required">First name:</label></div>
   <div class="element"><input type="text" name="email" id="email" value="" /></div>
</div>
<div class="item">
   <div class="label"><label for="email" class="required">Last name:</label></div>
   <div class="element"><input type="text" name="email" id="email" value="" /></div>
</div>

我该怎么做?我阅读了手册,但我没有更多的想法:(

【问题讨论】:

检查这个:***.com/questions/7546135/… 【参考方案1】:

试试:

$this->setElementDecorators(array(
   array('ViewHelper'),
   array('Errors', array('tag' => 'div', 'class' => 'error')),
   array('Label', array('tag' => 'span')),
   array('HtmlTag', array('tag' => 'div', 'class' => 'label')),
));

然后当你渲染你的表单时,像这样手动渲染它:

<div class="form">
    <form method="<?php echo $this->form->getMethod() ?>"
          action="<?php echo $this->form->getAction() ?>">

        <div class="item">
            <?php echo $this->form->firstName ?></div>
        </div>

        <div class="item">
            <?php echo $this->form->lastName ?></div>
        </div>

        // the rest of your elements...

        <?php echo $this->form->submit ?>
    </form>
</div>

在您的视图中输出单个表单元素可以让您更好地控制表单的输出,并让您更好地控制元素的显示位置以及它们所在的 HTML。

如果可以的话,我会使用简短的&lt;?php echo $this-&gt;form ?&gt;,但我的大多数表单都更漂亮,我将自定义标记与我的元素装饰器结合使用,以使表单看起来完全符合我的要求。

另请参阅Using ViewScript Decorator on Nested Subforms (Zend Form) 和 How To Remove All DtDdWrappers and Labels on Zend Form Elements。

【讨论】:

以上是关于如何使用 Zend Form Decorator 将所有输入和标签放入 div?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用装饰器将多个 div 或字段集添加到 zend_form?

如何模拟 Zend\Form 提交而不在 Zend Framework 2/3 中显示表单?

如何将 Zend_Dojo 表单元素动态添加到 zend_form?

zend decorator easy way包装dt标签和dd输入div内的输入id

如何模拟Zend Form提交而不在Zend Framework 2/3中显示表单?

对 Zend_Form 中的特定子表单使用自定义 isValid() 函数