問題:使用$ form-> bind($ object)時,表單中的多個字段集不會被填充/水合。你如何填充2個不同的字段集以形成2個不同的實體對象? 我有2個字段集:FieldsetA,FieldsetBzf2/zf3使用對象保存多個字段集
表單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,但我從數據庫檢索數據確定。 注意:如果我將此標誌設置爲'use_as_base_fieldset'=> true,則將填充1個對象(ServiceProvider),反之亦然,如果我將位置字段設置爲'true'則填充。 我一直在尋找幾個小時,試驗和錯誤沒有成功,我希望這只是我的疲勞,錯過了一個簡單的設置/配置步驟,以使其工作。
摘要:如何在一個表單中填充2個或更多個實體以及2個或更多個實體? 綁定(),fieldset-> bindValues()?
嘗試:
$form->get('service_provider_fieldset')->allowObjectBinding(true);
$form->get('service_provider_fieldset')->allowedObjectBindingClass(\Provider\Form\ServiceProviderFieldset::class);
這些都是一些鏈接是接近,但仍無法填充通過獨立的實體都字段設置。 ZF2 Form Hydration with multiple objects and fieldsets https://framework.zend.com/manual/2.4/en/modules/zend.form.collections.html hydrating multiple objects from fieldsets ZF2
的集合(產品/品牌/種類)實施例意味着使用=>爲真,用於綁定的'use_as_base_fieldset' 一 '單' 集合()...?
更新:我已經能夠通過使用上面的鏈接中的集合文檔示例來獲得進程工作。 使用一個模擬具有1:1,1:多關係的模型的字段集。 問題仍然存在 - 但如何使用不相關的對象填充兩個或多個字段集的表單 –
示例包含一個帶有驗證碼的註冊表單。我可以創建一個函數,直接添加到表單中,然後我必須爲每個表單重複此操作[或者擴展一個抽象表單]。 –
你解決了你的問題嗎?我也有同樣的建議。當你從工廠檢索一個字段集時,使用表單的'init()'。如果你只有簡單的輸入,你可以將它們包含到fieldset的'__construct()'方法或表單中。 –