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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum ich Tue, ist zu verketten InputFilter so konnte ich den Griff auf die gesamten HTML form array geschrieben.
Diese erstellt ein array geschrieben wie
Gefiltert und validiert werden:
http://www.unexpectedit.com/zf2/inputfilter-validate-and-filter-a-form-data-with-fieldsets
$contactFilter->add($mainFilter, "contact");
. Jetzt weiß ich, wie man filter anwenden für fieldsets. Danke!InformationsquelleAutor Ignacio Pascual
Ich denke, dass Sie vergessen haben, bereiten Sie Ihr Formular im controller:
Dies wird benennen Sie die "name" - Feld Ihrer fieldset "myfieldset[foo]", so dass Sie nicht haben, um voranstellen fieldsets name auf Ihrem eigenen.
Verwenden Sie einfach
statt
in Ihrem fieldset class.
InformationsquelleAutor MaGna
Ich denke, das problem ist, dass Sie deklarieren Sie eine neue form in Ihrer Steuerung. Und das löschen der bisherigen form.
Ich die Service Manager zu erklären, die form und Filter.
Und dann in den controller mache ich:
So ich bekomme immer das Objekt, ich möchte
Update
Ich nicht mehr verwenden-manager zum Aufruf von Formularen. Ich rufen Sie ein neues Formular und die Ausgabe von $Formular->setData($data);
Die Quelle für die Daten kann auch die Person wenn dann würde ich das Problem: $form->bind($entity)
Methode instanzieren der form absolut nichts zu tun hat mit diesem Thema.
InformationsquelleAutor michaelbn