Zend Framework: How do I remove the decorators on a Zend Form Hidden Element?
I'm trying to remove the default decorators on a hidden form element. By default, the hidden element is displayed like this:
<dt>Hidden Element Label (if I had set one)</dt>
<dd><input type="hidden" name="foobar" value="1" id="foobar"></dd>
I don't want my hidden element to take up space on my page. I want to remove all the default decorators so all I'm left with is the input tag.
<input type="hidden" name="foobar" value="1" id="foobar">
How can I achieve this?
For hidden field you need only one decorator - ViewHelper:
$field = new Zend_Form_Element_Hidden('id');
$field->setDecorators(array('ViewHelper'));
This will render only the input field, without Dt-Dd wrapper and label.
From the Zend Element Decorators documentation:
Default Decorators Do Not Need to Be Loaded
By default, the default decorators are loaded during object initialization. You can disable this by passing the 'disableLoadDefaultDecorators' option to the constructor:
$element = new Zend_Form_Element('foo', array('disableLoadDefaultDecorators' => true) );
I use this
$element->removeDecorator('DtDdWrapper');
to get rid of the dt dd tags around specific elements
// based on above - a simple function to add a hidden element to $this form
/**
* 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);
}
When you have a lot of hidden inputs best answer is the following:
$elements = $this->getElements();
foreach ($elements as $elem)
if ($elem instanceof Zend_Form_Element_Hidden)
$elem->removeDecorator('label')->removeDecorator('HtmlTag');