Füllen der Formular-Daten in ZF2 bei der Verwendung von Fieldsets

Ich bin derzeit rund um das Spiel mit ZF2 beta 4 und ich scheine zu stecken, wenn ich versuche, mit fieldsets im Formular und die Daten wieder in das Formular wenn das Formular abgeschickt wird. Ich bin nicht sicher, wenn ich bin nicht den input-Filter das richtige für fieldsets oder bin ich etwas fehlt. Zum Beispiel habe ich Folgendes (vereinfacht deutlich zu machen):

Controller

public function indexAction(){
   $form = new MyForm();
   $request = $this->getRequest();
          if ($request->isPost()) {
                 $form->setData($request->post());
                 if ($form->isValid()) {
                        //Do something
                        print_r($form->getData()); //for debug
                 }
          }
   return array('form' => $form);
}

MyForm.php

class MyForm extends Form
{
    public function __construct()
    {
        parent::__construct();
        $this->setName('myForm');
        $this->setAttribute('method', 'post');

        $this->add(array(
                    'name' => 'title',
                    'attributes' => array(
                    'type'  => 'text',
                    'label' => 'Title',
                    ),
                 ));

        $this->add(new MyFieldset('myfieldset'));

        //setting InputFilters here
        $inputFilter = new InputFilter();
        $factory = new InputFactory();

        $inputFilter->add($factory->createInput(array(
            'name'     => 'title',
            'required' => true,
            'filters'  => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
        )));

        //Now add fieldset Input filter
        foreach($this->getFieldsets() as $fieldset){
              $fieldsetInputFilter = $factory->createInputFilter($fieldset->getInputFilterSpecification());
              $inputFilter->add($fieldsetInputFilter,$fieldset->getName());
        }

        //Set InputFilter
        $this->setInputFilter($inputFilter);
    }
}

MyFieldset.php

class MyFieldset extends Fieldset implements InputFilterProviderInterface{
    public function __construct($name)
    {
        parent::__construct($name);
        $factory = new Factory();

        $this->add($factory->createElement(array(
            'name' => $name . 'foo',
            'attributes' => array(
                'type'  => 'text',
                'label' => 'Foo',
            ),
        )));
    }

    public function getInputFilterSpecification(){
        return array(
            'foo' => array(
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
            ),
        );
    }
}

Ich bin in der Lage, um die Ausgabe der form wie erwartet und ich am Ende mit zwei input-Elemente mit dem Namen 'title' und 'myfieldsetfoo' (der name gegeben, wenn Sie bestens mit dem ViewHelper). So natürlich, wenn ich behaupte, dass die raw-Beitrag wird zeigen die Werte für 'Titel' und 'myfieldsetfoo'. Allerdings, wenn ich SetData() die Werte für das Feld gesetzt, werden auch nicht aufgefüllt (obwohl ich kann sehen, wie die Werte in der raw-post-Objekt). Stattdessen untersuchen Sie die Ausgabe von " $Formular->getData()' erhalte ich:

Array(
   [title] => Test,
   [myfieldset] => Array(
                         [foo] =>
                        )
)

Was bin ich? Was muss ich tun, damit ZF2 versteht, wie zum Auffüllen des fieldset?

Vielen Dank für jede Hilfe, das treibt mich verrückt.

InformationsquelleAutor Jaime R. | 2012-06-08

Schreibe einen Kommentar