问题:使用 $form->bind($object) 时,表单中的多个字段集未填充/水合。您如何以 2 个不同的实体对象的形式填充 2 个不同的字段集?我有 2 个字段集:FieldsetA、FieldsetB
表单 RegisterFrom 在其 init() 方法中调用这些
class RegisterForm extends Form
{
public function init(){
$this->add(array(
'name' => 'service_provider_fieldset',
'type' => ServiceProviderFieldset::class, // this is one model/entity
));
$this->add(array(
'name' => 'location_fieldset',
'type' => LocationFieldset::class, // this is a separate model/entity
));
}
}
创建字段集:(注意注释掉水合尝试)
class ServiceProviderFieldset extends Fieldset
{
public function init(){
//parent::__construct($name);
/*
$this
->setHydrator(new ClassMethodsHydrator(false))
->setObject(new ServiceProvider())
;
*/
/*
$this
->setHydrator(new ReflectionHydrator(false))
->setObject(new ServiceProvider())
;
*/
$this->add(array(
'type'=>'Hidden',
'name'=>'id',
'options'=>array(
'label' => 'Service Provider Id'
),
'attributes'=>array(
'id'=>'providerId'
)
));
}
}
控制器:
$provider = $this->findServiceProviderById($providerId); // this is set from DB call and correctly creates a Provider() object with populated values.
$location = $this->findServiceProviderLocationById($locId);
$form = $formManager->get(RegisterForm::class);
$form->bind($provider);
$form->bin($location);
// $form->get('service_provider_fieldset')->bindValues(...);
看法:
$formElement = $form->get('service_provider_fieldset')->get('email');
etc...
表单在视图中正确呈现,但没有填充数据。
注意:不使用 Doctrine,但我从数据库中检索数据 OK。注意:如果我将此标志设置 为“use_as_base_fieldset”=> true,则填充 1 个对象(服务提供者),反之亦然,如果我将位置字段设置为“true”,则填充。我一直在寻找几个小时,反复试验但没有成功,我希望这只是我的疲劳,错过了一个简单的设置/配置步骤来让它工作。
摘要:如何在一个表单中使用 2 个或更多实体填充 2 个或更多字段集?绑定(),字段集->绑定值()?
试过:
$form->get('service_provider_fieldset')->allowObjectBinding(true);
$form->get('service_provider_fieldset')->allowedObjectBindingClass(\Provider\Form\ServiceProviderFieldset::class);
这些是一些关闭但仍无法通过单独的实体填充两个字段集的链接。 具有多个对象和字段集的 ZF2 表单水合 https://framework.zend.com/manual/2.4/en/modules/zend.form.collections.html 水合来自字段集 ZF2 的多个对象
集合(产品/品牌/类别)示例意味着使用“use_as_base_fieldset”=> true 的“单个”集合,用于绑定()...?