/ / zend_form декоратор у всій формі не кожен окремий елемент - zend-framework, zend-form

zend_form декоратор у всій формі не кожен окремий елемент - zend-framework, zend-form

Користувальницький HTML-вихід на прапорець Zend Form встановити властивість setLabel
На додаток до цього питання.
Я хочу застосувати це до всіх моїх форм-елементів, не додаючи їх до кожного окремого елемента form_element


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));
}

Відповіді:

3 для відповіді № 1

Ви можете зробити себе класом, який розширює Zend_Form і перевантажте createElement спосіб:

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;
}
}

і тоді ви поширюєте цю форму:

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");
...
}

}

Ви можете використовувати цей метод для багатьох інших речей. Раніше я використовував його для визначення декораторів за замовчуванням на всіх моїх елементах форми.


1 для відповіді № 2

Ви можете зателефонувати setElementDecorators() після addElements() встановити декоратори для всіх елементів у формі. Див. Додаткову інформацію в пов'язаній Zend Framework документація.

Надія, що допомагає