zend框架创建空显示组然后添加元素

时间:2011-11-04 08:50:14

标签: zend-framework zend-form zend-form-element

是否可以创建一个空的显示组,然后添加元素?

我试过了:

addDisplayGroup(null, 'exampleGroup')

但你必须传递至少一个元素......

我需要创建一个空的显示组。

我需要这样做,因为在创建显示组之后,我将在foreach中逐个添加元素....

再次感谢...

3 个答案:

答案 0 :(得分:2)

您可以尝试使用

$form->addDisplayGroup(array(), 'exampleGroup');

然后得到那样的显示组:

$displayGroup = $form->getDisplayGroup('exampleGroup');

稍后使用$displayGroup->addElement()$displayGroup->createElement()逐个添加元素。

您可以在Display Groups documentation

中查看更多详情

修改

ZF不允许添加没有元素的显示组。最简单的解决方案可能是首先创建元素,将它们放入数组中,然后将该数组传递给addDisplayGroup

也可以实例化一个新的Zend_Form_DisplayGroup对象,然后使用$form->addDisplayGroups(array($group))将其添加到表单中,但我怀疑它是否比使用已创建的元素调用addDisplayGroup()更方便。

希望有所帮助,

答案 1 :(得分:1)

如何覆盖表单的addDisplayGroup($elements, $name)方法,必要时添加虚拟元素:

class My_Form extends Zend_Form
{

    protected $dummyName = '_myDummy';

    public function addDisplayGroup(array $elements, $name)
    {
        if (count($elements) == 0){
            $elt = new Zend_Form_Element_Hidden($this->dummyName);
            $elt->setIgnore(true);
            $elements[] = $this->dummyName;
        }
        return parent::addDisplayGroup($elements, $name);
    }

    public function render(Zend_View_Interface $view = null)
    {
        $this->removeElement($this->dummyName);
        return parent::render($view);
    }
}

然后在您的表单中,您现在可以调用:

$displayGroup = $this->addDisplayGroup(array(), 'myDisplayGroup');

$elt1 = new Zend_Form_Element_Text('myElement1');
$displayGroup->addElement($elt1);

$elt2 = new Zend_Form_Element_Text('myElement2');
$displayGroup->addElement($elt2);

// etc

答案 2 :(得分:0)

我的解决方案:

$zgody = $db->fetchAll($db->select()->from('rodo_regulki')->where( 'id_inwest =?', $inwest ));

$getFirstElement = $zgody[0]->id;
$this->addDisplayGroup(array('zgoda_'.$getFirstElement),'zgody', array('legend' => 'Zgody'));

foreach($zgody as $zgoda) {
    $element = 'zgoda_'.$zgoda->id;
    $addElement = $this->getElement($element);
    $displayGroup = $this->getDisplayGroup('zgody');
    $displayGroup->addElement($addElement);
}