0

我有一个 Zend_Form 表单,带有一些自定义装饰器,如下所示:

$decorators = array();
$decorators[] = new Zend_Form_Decorator_ViewHelper(array());
$decorators[] = new Zend_Form_Decorator_Errors;
$decorators[] = new Zend_Form_Decorator_HtmlTag(array('tag' => 'div', 'class' => 'form-item'));
$decorators[] = new Zend_Form_Decorator_Label(array('class' => 'form-label'));
$decorators[] = new Zend_Form_Decorator_Callback(array(
    'callback' => function($content, $element, $options) {
        return sprintf('<div class="form-row">%s</div>', $content);
    },
    'placement' => false
));
$this->setElementDecorators($decorators);

问题是,所有字段都呈现为文本输入。为什么会这样?

编辑:我发现,它不一定将所有输入呈现为文本输入,而是使用表单中第一个输入的类型呈现它们。这是我使用的表单示例(装饰器设置为 int parent's init):

<?php

class Form_Users_Add extends Form_Base {
    protected $pbxs = array(1 => 'Element 1', 2 => 'Element 2');

    public function init() {
        $monitors = new Zend_Form_Element_Checkbox('prefered_screen_count');
        $monitors->setCheckedValue(2);
        $monitors->setUncheckedValue(1);
        $monitors->setLabel('two_monitors');
        $this->addElement($monitors);

        $pbx = new Zend_Form_Element_Select('asterisk_id');
        $pbx->setMultiOptions($this->pbxs);
        $pbx->setLabel('users_asterisk_id');
        $this->addElement($pbx);

        parent::init();
    }

}
4

1 回答 1

1

耶!我已经解决了这个问题!原因是我使用了类的实例,而不是名称。这样每个元素都使用相同的装饰器实例。

于 2013-01-11T09:02:21.340 回答