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

时间:2012-03-21 08:41:27

标签: php zend-framework decorator

我的代码如下:

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

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

1 个答案:

答案 0 :(得分:4)

尝试:

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

如果可以的话,我将使用短<?php echo $this->form ?>,但我的大部分表格都比较漂亮,我使用自定义标记与我的元素装饰器一起使表格看起来完全符合我的要求。

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