Советы относительно Zend_Form - PullRequest
       0

Советы относительно Zend_Form

1 голос
/ 15 октября 2010

Я создаю приложение, используя Zend_Framework, и я хотел бы попросить вас дать совет относительно Zend_Form. Все формы на сайте должны быть украшены таблицами, а не списками определений. Моя идея заключается в том, что я должен создать общую форму (без элементов), а затем просто создать ее экземпляр на сайте и добавлять элементы по мере необходимости. Эта общая форма должна была бы изменить стандартные декораторы, чтобы таблицы использовались вместо списков определений. Как вы предлагаете это сделать? Переопределить метод addElement () Zend_Form, чтобы он изменял декораторы новых элементов?

Но есть еще одна оговорка. Должна быть возможность использования другого набора декораторов для конкретного элемента, если это необходимо. Так что я немного озадачен, как это сделать. Есть ли у вас какие-либо советы?

Ответы [ 2 ]

2 голосов
/ 15 октября 2010

Нет простого способа переопределить декораторы по умолчанию. Решение, которое я использую, - переопределить все элементы и переопределить метод loadDefaultDecorators.

Проблема в том, что каждый элемент имеет определенный набор декораторов. Например, скрытому элементу нужен только декоратор ViewHelper, в то время как элементу файла нужны Файл, Ошибки, Описание, HtmlTag (td), Метка (th), HtmlTag (tr).

Вы также можете использовать Zend_Form :: setElementDecorators в конце вашего метода init (после вызова addElement). Но вам нужно настроить его для каждой формы ...

1 голос
/ 16 октября 2010

Используйте промежуточный класс для широкой конфигурации вашего проекта.Затем вы расширите этот класс вместо Zend_Form

file My/Form.php

<?php
abstract class My_Form extends Zend_Form {

    public function __construct ( $options = null ) {
        parent::__construct($options);

        $this->setElementDecorators(array(
                // the base <input, <select, <textarea markup
                'ViewHelper',

                // wrap that into a <div class="input-wrap" />
               array (
                    'HtmlTag',
                    array (
                        'tag'   => 'div',
                        'class' => 'input-wrap',
                    )
                ),

                // append errors in <ul/li>
               'Errors',

                // then prepend <label markup
                'Label',
            ));
    }
}

, затем в файле My/Form/Demo.php

<?php
class My_Form_Demo extends My_Form {

    public function init () {
        // Your elements here
    }
}

Вы можете сделать это дляа также конкретный элемент

file My/Form/Element/Group.php

<?php
class My_Form_Element_Group extends Zend_Form_Element_Select {

    public function init () {
        // Specific options
        $this->addMultiOptions(array(
            'A' => 'group A',
            'B' => 'group B',
        ));

        // This element doesn't need the div.input-wrap
        $this->removeDecorator('HtmlTag');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...