私は現在 ZF2 ベータ 4 をいじっていますが、フォーム内でフィールドセットを使用しようとすると、フォームが送信されたときにデータをフォームに戻そうとすると行き詰まるようです。フィールドセットに対して入力フィルターを正しく設定していないのか、何か不足しているのかわかりません。たとえば、次のようなものがあります (わかりやすくするために簡略化しています)。
コントローラ
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'),
),
),
);
}
}
期待どおりにフォームを出力することができ、'title' と 'myfieldsetfoo' (ViewHelper で出力するときに付けられた名前) という名前の 2 つの入力要素になります。もちろん、未加工の投稿を送信すると、「title」と「myfieldsetfoo」の値が表示されます。ただし、SetData() を使用すると、フィールド セットの値が入力されません (生の投稿オブジェクトの値を確認できますが)。代わりに、「$form->getData()」の出力を調べると、次のように表示されます。
Array(
[title] => Test,
[myfieldset] => Array(
[foo] =>
)
)
私は何が欠けていますか?ZF2 がフィールドセットに入力する方法を理解するには、何をする必要がありますか?
助けてくれてありがとう、これは私を夢中にさせています。