/ / zend_form decorator en forma completa no cada elemento individual - zend-framework, zend-form

zend_form decorator en forma completa no cada elemento individual - zend-framework, zend-form

Salida HTML personalizada en Zend Form Checkbox setLabel Property
Además de esta pregunta.
Quiero aplicar esto a todos mis elementos de formulario sin agregarlo a cada formulario_elemento


class my_form extends Zend_Form
{
public function init()
{
$this->setAction("")
->setMethod("post");
//shouldn"t I be able to set the decorator here?

$firstname= new Zend_Form_Element_Text("firstname");
$firstname->setLabel("firstname")
->setRequired(true)
->getDecorator("label")
->setOptions(array("requiredSuffix"=> " <span class="required">*</span> ", "escape"=> false))
//here it works but I don"t want it on every element.
;

$lastname= new Zend_Form_Element_Text("lastname");
$lastname->setLabel("firstname")
->setRequired(true)
->getDecorator("label")
->setOptions(array("requiredSuffix"=> " <span class="required">*</span> ", "escape"=> false))
//here it works but I don"t want it on every element.
;
$this->addElements(array($lastname, $firstname));
}

Respuestas

3 para la respuesta № 1

Podrías hacerte una clase que amplíe el Zend_Form y sobrecargar el createElement método:

class My_Base_Form extends Zend_Form
{
public function createElement($type, $name, $options = null)
{
$element = parent::createElement($type, $name, $options);
$element->setOptions(
array("requiredSuffix"=> " <span class="required">*</span> ")
);
$label = $element->getDecorator("Label");

if (!empty($label)) {
$label->setOption("escape", false);
}
return $element;
}
}

y luego extiende esa forma:

class My_Form extends My_Base_Form
{
public function init()
{
...
// $firstname= new Zend_Form_Element_Text("firstname"); old version

// taking advantage of the createElement
$firstname = $this->createElement("text", "firstname");
...
}

}

Podría usar ese método para muchas otras cosas. En el pasado lo he usado para definir los decoradores por defecto en todos mis elementos de formulario.


1 para la respuesta № 2

Puedes llamar setElementDecorators() después addElements() para configurar decoradores para todos los elementos en el formulario. Ver más información en el relacionado Documentación de Zend Framework.

Espero que ayude,