Zend framework zend framework创建空的显示组,然后添加元素

Zend framework zend framework创建空的显示组,然后添加元素,zend-framework,zend-form,zend-form-element,Zend Framework,Zend Form,Zend Form Element,是否可以创建一个空的显示组,然后添加元素 我试过: addDisplayGroup(null, 'exampleGroup') 但你必须至少传递一个元素 我只需要创建一个空的显示组 我需要这样做,因为在创建显示组之后,我将在foreach中逐个添加元素 再次感谢…您可以尝试使用 $form->addDisplayGroup(array(), 'exampleGroup'); 然后获得如下显示组: $displayGroup = $form->getDisplayGroup('ex

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

我试过:

addDisplayGroup(null, 'exampleGroup')
但你必须至少传递一个元素

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

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

再次感谢…

您可以尝试使用

$form->addDisplayGroup(array(), 'exampleGroup');
然后获得如下显示组:

$displayGroup = $form->getDisplayGroup('exampleGroup');
然后使用
$displayGroup->addElement()
$displayGroup->createElement()
逐个添加元素

您可以在中看到更多详细信息

编辑

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

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


希望这有帮助,

重写表单的
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
我的解决方案:

$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);
}

只需在foreach期间将元素放入数组中,然后将其传递给->addDisplayGroupHi Max,是的,最后我这样做了。。。我想到了。。。我只是想换一种方式,因为代码看起来更容易理解。。。不管怎样都可以。。。再次感谢你的回答,迪诺普米。。。我在你之前试过了,但没用。。。它返回一个异常:没有为显示组指定有效的元素。在这种情况下,正如@max4ever在其注释中所指出的,只需先创建元素并在它们准备好后调用addDisplayGroup就更容易了。。。