我在 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 是主要的,地址是字段集。这似乎工作。然后我把它放在我的表格中:
$oForm->setData($oForm->getHydrator()->extract($_SESSION->getPersonalData()));
return new ViewModel(array('form'=>$oForm));
addressFieldset 有一个水合器和一个绑定,它确实有效,因为所有对象都被完美填充。唯一的问题是,当我打开页面时,输入字段为空,只填写生日和电话,直接在表单上
我的表单实现了这样的地址字段集:
$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。我已经检查了我的元素两次。模型和元素之间的唯一区别是声明顺序不同。我也在字段集和表单中调用了 setUseAsBaseField(true) 方法。我不明白为什么数据在值中而不是在元素中。