Zend Framework:如何删除Zend Form Hidden Element上的装饰器?

And*_*rew 49 zend-framework zend-form zend-decorators

我正在尝试删除隐藏表单元素上的默认装饰器.默认情况下,隐藏元素显示如下:

<dt>Hidden Element Label (if I had set one)</dt>
<dd><input type="hidden" name="foobar" value="1" id="foobar"></dd>
Run Code Online (Sandbox Code Playgroud)

我不希望我的隐藏元素占用我页面上的空间.我想删除所有默认装饰器,所以我剩下的就是输入标签.

<input type="hidden" name="foobar" value="1" id="foobar">
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

isc*_*odv 50

对于隐藏字段,您只需要一个装饰器 - ViewHelper:

$field = new Zend_Form_Element_Hidden('id');
$field->setDecorators(array('ViewHelper'));
Run Code Online (Sandbox Code Playgroud)

这将只渲染输入字段,没有Dt-Dd包装和标签.


drf*_*oob 32

Zend Element Decorators文档:

默认装饰器不需要加载

默认情况下,在对象初始化期间加载默认装饰器.您可以通过将'disableLoadDefaultDecorators'选项传递给构造函数来禁用它:

$element = new Zend_Form_Element('foo', 
    array('disableLoadDefaultDecorators' => true)
);
Run Code Online (Sandbox Code Playgroud)

  • 便利!我使用它像$ this-> addElement('hidden','article_id',array('disableLoadDefaultDecorators'=> true)); 在我的init方法中. (3认同)
  • 使用这个解决方案,`<input type ="hidden">`字段根本不显示给我. (3认同)

dit*_*med 24

我用这个

$element->removeDecorator('DtDdWrapper');
Run Code Online (Sandbox Code Playgroud)

摆脱特定元素周围的dt dd标签


小智 6

//基于上面 - 一个向$ this表单添加隐藏元素的简单函数

/**
 * Add Hidden Element
 * @param $field
 * @param value
 * @return nothing - adds hidden element
 * */
public function addHid($field, $value){     
    $hiddenIdField = new Zend_Form_Element_Hidden($field);
    $hiddenIdField->setValue($value)
          ->removeDecorator('label')
          ->removeDecorator('HtmlTag');     
    $this->addElement($hiddenIdField);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

正如其他帖子setDisableLoadDefaultDecorators(true)中提到的,如果它们已经加载clearDecorators()就不起作用......但确实如此!


小智 5

当您有大量隐藏输入时,最佳答案如下:

$elements = $this->getElements();
foreach ($elements as $elem)
    if ($elem instanceof Zend_Form_Element_Hidden)
        $elem->removeDecorator('label')->removeDecorator('HtmlTag');
Run Code Online (Sandbox Code Playgroud)