ZF2 заполнить элемент коллекции форм дочерними объектами

Основываясь на руководстве по Zend Framework 2 ( здесь), я сделал такую ​​форму:

class ParentForm extends Form
{
    public function init()
    {   
        $this->setName('parent_form')
             ->setAttribute('method', 'post')
             ->setHydrator(new ClassMethods(true))
             ->setInputFilter(new InputFilter());

        $this->add(array(
            'type' => 'Application\Form\Fieldset\Parent',
            'name' => 'parent',
            'options' => array(
                'label'                => 'Parent',
                'use_as_base_fieldset' => true
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Csrf',
            'name' => 'csrf'
        ));

        $this->add(array(
            'name' => 'submit',
            'attributes' => array(
                'type' => 'submit',
                'value' => 'Send'
            )
        ));
    }
}

И "родительский" набор полей:

class ParentFieldset extends Fieldset
{    
    protected $count = 2;    

    public function init()
    {   
        $this->setName('parent_fieldset')
             ->setHydrator(new ClassMethodsHydrator(false))
             ->setObject(new Model\Parent());

        $this->add(array('type' => 'Element\MyField'));            

        $this->add(array(
            'type' => 'collection',
            'name' => 'children',
            'options' => array(
                'label'                  => 'Children',
                'count'                  => $this->count,
                'should_create_template' => true,
                'allow_add'              => true,
                'target_element'         => array(
                    'type'    => 'Application\Form\Fieldset\Child',
                    'name'    => 'child',
                    'options' => array(
                        'label' => child',
                    ),
                ),
            )
        ));
    }

    public function setCount($count)
    {
        $this->count = max($count, 2);
    }
}

Это прекрасно работает для увлажнения моего родительского объекта с данными, полученными из моей формы. Var_dump полученного объекта будет выглядеть так:

object(Parent)
public myField  => foo
public children =>
 array => 
  0 => object(Child)
    public field1 => value1
    public field2 => value2
    ....
  1 => object(Child)
    .....
  2 => object(Child)
    .....

Но я не могу понять, как заполнить эту многомерную форму вышеуказанным объектом, если он гидратирован из базы данных (для целей редактирования). Как я могу это сделать?

Примечание: для свойства count в форме задано то же количество дочерних элементов, что и для объекта.

0 ответов

Другие вопросы по тегам