Zend Framework создать пустую группу отображения и затем добавить элемент - PullRequest
1 голос
/ 04 ноября 2011

Можно ли создать пустую группу отображения и затем добавить элементы?

Я пытался:

addDisplayGroup(null, 'exampleGroup')

Но вы должны передать хотя бы элемент ...

Мне нужно создать просто пустую группу отображения.

Мне нужно сделать это, потому что после создания группы отображения я буду добавлять элементы один за другим в foreach ....

Еще раз спасибо ...

Ответы [ 3 ]

2 голосов
/ 04 ноября 2011

Вы можете попробовать с

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

, а затем получить группу отображения следующим образом:

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

и добавьте элементы один за другим с помощью $displayGroup->addElement() или $displayGroup->createElement().

Более подробную информацию можно найти в документации по Группы отображения .

EDIT

ZF не позволяет добавлять группу отображения без элементов. Самое простое решение - сначала создать элементы, поместить их в массив, а затем передать этот массив в addDisplayGroup.

Можно также создать новый объект Zend_Form_DisplayGroup и затем добавить его в форму, используя $form->addDisplayGroups(array($group)), но я сомневаюсь, что это удобнее, чем вызывать addDisplayGroup() с уже созданными элементами.

Надеюсь, это поможет,

1 голос
/ 05 ноября 2011

Как насчет переопределения метода 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
0 голосов
/ 13 апреля 2018

Мое решение:

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