Декоратор zend_form для всей формы, а не для каждого элемента - PullRequest
2 голосов
/ 29 сентября 2011

Пользовательский HTML-вывод в Zend Form Флажок setLabel Property В дополнение к этому вопросу. Я хочу применить это ко всем моим form_elements, не добавляя его к каждому отдельному form_element


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

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

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

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

Вы можете создать себе класс, который расширяет 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 голос
/ 29 сентября 2011

Вы можете позвонить setElementDecorators() после addElements(), чтобы установить декораторы для всех элементов в форме. Дополнительную информацию смотрите в соответствующей документации Zend Framework .

Надеюсь, это поможет,

...