Zend Framework 2 のフィールドセットに問題があります。ユーザーは個人データをフォームに保存できます。彼がすでにこれを保存している場合は、データベースからのデータが事前に入力されているはずです。これは単なるフォームだったので問題なく機能しましたが、プログラムの他の部分で使用できるように、フィールドセットに住所データが必要です。現在、入力フィールドは空のままです。
最初に、セッションで個人データを入力します。私のデータは次のようになります。
object(Application\Model\Product\PersonalData)#247 (3) {
["tel":protected]=> string(0) ""
["birthday":protected]=> string(10) "2013-01-01"
["address":protected]=> object(Application\Model\Account\Addresses)#248 (15) {
["firstname":protected]=> string(5) "Ernie"
["surname":protected]=> string(6) "Muppet"
...
}
}
ご覧のとおり、データはすでに指定されたオブジェクトにバインドされており、PersonalData がメイン、Addresses がフィールドセットになっています。これはうまくいくようです。それから私はそれを私の形に入れました:
$oForm->setData($oForm->getHydrator()->extract($_SESSION->getPersonalData()));
return new ViewModel(array('form'=>$oForm));
addressFieldset にはハイドレーターとバインディングがあり、すべてのオブジェクトが完全に満たされているため、機能します。唯一の問題は、ページを開くと、入力フィールドが空で、フォームに直接ある誕生日と電話だけが入力されていることです
私のフォームは、次のように address-fieldset を実装しています。
$addressFieldset = new AddressFieldset($lang);
$addressFieldset->setUseAsBaseFieldset(true);
$addressFieldset->setName('address');
$this->add($addressFieldset);
フィールドセットの正しいアドレス指定に問題があるだけだと思いますが、データを投稿した後になぜ正しく入力されるのか説明できません。私が望むのは、彼が私の Fieldset に setData を入力することだけです。
あなたが私の質問を理解し、私を助けてくれることを願っています.
どうもありがとう、
スヴェンヤ
編集: もう少し分析しましたが、非常に奇妙で、何が問題なのかわかりません。デバッグすると、$fieldset->getValue() が必要なすべてのデータを返すことがわかります。そのため、バインディングが間違っている可能性があると考え、これを実行して段階的にデバッグしました。
$values = $this->form->get('address')->getValue();
$addressFieldset = $this->form->get('address');
$aValues = $addressFieldset->getHydrator()->extract($values);
$addressFieldset->bindValues($aValues);
私はFieldset.phpに行き、bindValuesはそれがすべきことを完全に行い(とにかく要約にすぎません(?))、ハイドレーターを呼び出してオブジェクトを埋めます。しかし、要素に表示すると、すべての値が NULL になります。私はすでに自分の要素を2回チェックしました。モデルと要素の唯一の違いは、宣言の順序が異なることです。フィールドセットとフォームでも setUseAsBaseField(true) メソッドを呼び出します。データが値ではなく要素である理由がわかりません。