Zend 表单显示组装饰器

Posted

技术标签:

【中文标题】Zend 表单显示组装饰器【英文标题】:Zend Form Display Group Decorators 【发布时间】:2011-06-24 22:32:27 【问题描述】:

当您查看 下面的标记你会看到有一个带有 id address-label 的 dt 和下面的 dd,我想删除这些但保留 字段集。

要添加我正在使用这个$this->addDisplayGroup(array(...), 'legend' => 'address');的显示组 添加每个元素后,我的表单初始化类。是否有一些装饰器可以用来移除 我不想要的元素?

<form id="CreateAddress" enctype="application/x-www-form-urlencoded" action="" method="post">
    <dl class="zend_form"> 
        <dt id="address-label">&#160;</dt>
        <dd id="address-element">
            <fieldset id="fieldset-address">
                <legend>Address</legend> 
                <dl>             
                    <dt id="addressLine1-label">
                        <label for="addressLine1" class="required">Address Line 1</label>
                    </dt> 
                    <dd id="addressLine1-element"> 
                        <input type="text" name="addressLine1" id="addressLine1" value="">
                    </dd> 

                    ...etc...

            </fieldset>
        </dd> 
        ...buttons...
    </dl>
</form>

谢谢, 马丁

【问题讨论】:

【参考方案1】:

那么交易是什么?

$group = $form->getDisplayGroup ('the name of the group');
$group->removeDecorator ('Zend_Form_Decorator_DtDdWrapper');

【讨论】:

【参考方案2】:

removeDecorator 参数 Zend_Form_Decorator_DtDdWrapper 不起作用所以我使用了:

$group = $form->getDisplayGroup('the name of the group');
$group->removeDecorator('DtDdWrapper');

【讨论】:

【参考方案3】:

这样您就不必手动从每个显示组中单独删除 DtDd,您可以使用:

foreach ($this->_displayGroups as $dg)
            $dg->removeDecorator('DtDdWrapper');
        

【讨论】:

【参考方案4】:

如果你想将它应用到所有定义的 Zend 表单显示组(针对特定表单),一个更简洁的方法是:

$form->setDisplayGroupDecorators(array(
    'FormElements',
    'Fieldset',
));

注意:这只会改变之前定义的显示组。

【讨论】:

以上是关于Zend 表单显示组装饰器的主要内容,如果未能解决你的问题,请参考以下文章

自定义表单装饰器中的 Zend 框架类

Zend Framework 表单、装饰器和验证:我应该回到纯 HTML 吗?

Zend Form 装饰器的麻烦

在 Zend Framework 中,如何使用装饰器将表单元素包装在标签中?

Zend Form reCaptcha ViewScript 装饰器

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