3

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 プロパティは、オブジェクトと同じ数の子に設定されます。

4

0 に答える 0