Zend Framework: Как правильно настроить декораторы по умолчанию для элементов Zend_Form - PullRequest
0 голосов
/ 04 августа 2010

В настоящее время я устанавливаю декораторы по умолчанию для моего Zend_Form, используя класс, расширяющийся от Zend_Form ...

class Application_Form_Abstract extends Zend_Form {
    ... 
    function loadDefaultDecorators() {
        if ($this->loadDefaultDecoratorsIsDisabled()) {
            return $this;
        }

        // ... for elements
        $decorators = $this->_elementDecorators;
        if (empty($decorators)) {
            $this->setElementDecorators(array(
                'ViewHelper',
                'Errors',
                array('Description', array('tag' => 'p', 'escape' => false)),
                'Label',
                array('HtmlTag', array('tag' => 'p'))
            ));

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

$this->addElement('textarea', 'bio', array(
    'decorators' => array(
        'ViewHelper',
        'Errors',
        array('Description', array('tag' => 'p', 'escape' => false)),
        'Label',
        array('HtmlTag', array('tag' => 'p')),
        new Application_Form_Decorator_WmdPreview,
     )
));

, поскольку они будут перезаписаны моей пользовательской функцией loadDefaultDecorators().Интересно, есть ли способ установить декораторы по умолчанию для элемента, только если у них нет декораторов набора

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

Кроме того, чтобы избавить вас от головной боли, группы отображения не могут иметь того же имени, что и любой элемент, который они содержат

0 голосов
/ 01 февраля 2011

Вы можете отключить декоратор по умолчанию для элемента 'bio', добавив вызов setDisableLoadDefaultDecorators ()

$this->addElement('textarea', 'bio', array(
    'disableLoadDefaultDecorators' => true,
    'decorators' => array(
        'ViewHelper',
        'Errors',
        array('Description', array('tag' => 'p', 'escape' => false)),
        'Label',
        array('HtmlTag', array('tag' => 'p')),
        new Application_Form_Decorator_WmdPreview,
     )
));
...