2016-01-10 23 views
0

我在保溼ZF2中的物體時遇到了問題。從現場套裝保溼多個對象ZF2

我有一個表單用於將組織相關信息或與人員相關的信息保存到數據庫中。用戶做出選擇:保存組織或人員。所有html輸入只有1個表單。

在ZF2中,我創建了2個字段集。在每個字段組中,我使用setHydrator(new ClassMethods(false))setObject(new <objectForHydration>)。 2個字段集包括與以下代碼的形式:

$this->add([ 
     'type' => 'Parties\Form\Fieldsets\RegisterOrganizationFieldset', 
     'options' => [ 
      'use_as_base_fieldset' => true, 
     ], 
    ]); 

    $this->add([ 
     'type' => 'Parties\Form\Fieldsets\RegisterPersonFieldset', 
     'options' => [ 
      'use_as_base_fieldset' => true, 
     ], 
    ]); 

我想RegisterOrganizationFieldset水合OrganizationObject,和RegisterPersonFieldset水合PersonObject

我想同時保溼兩個對象,因爲這不會將條件引入表單類。問題是水合只發生在1個對象上,具體取決於哪個字段集具有use_as_base_fieldset = true。如果兩個字段集都具有use_as_base_fieldset = true,則稍後代碼(RegisterPersonFieldset)中的字段集合只能合併其各自的對象。

你能告訴如何水合這兩個對象嗎?也許如何以更好的方式水合物體?

編輯:

由於@jcropp指出,我用人物和組織爲是獨立的實體僅共享Id屬性的締約方。

回答

1

在同一時間水化兩個物體的一種方法是使它們都是同一個物體。

從您的問題中不清楚1)正在註冊的人是註冊組織的成員,還是2)「當事人」正在註冊,並且一方可以是組織或人員。以下是這兩種情況的一些答案:

如果人員是數據結構中的組織成員,則同時補充兩者的方法是將人員數據視爲組織數據元素的「集合」。此方法利用字段集之間的關係來創建單個數據集,其中組織數據和人員數據可以一起編輯。請參閱ZF2 Manual

如果您的意圖是註冊個人團體,並且一方可以是組織或人員,則以相同形式保溼一方或另一方的方法是使用表繼承。在單個表繼承中,對於兩種類型的參與方都有單個表(和單個字段集),並且在人員或組織類型之間進行選擇將指示是將數據輸入到組織字段還是表中的人員字段。在多表繼承中,您可以創建與組織表和人員表相關的派對錶;組織和個人領域將擴大黨派領域。

+0

這是你的第二個變體:派對可以是組織或人物。我想過使用表繼承。問題在於,在我的模型中,個人和組織唯一的共同財產是id。我想最好的策略是使用聚合水合劑或編寫自己的RegisterParty類,它將決定哪個對象要水合,並且實際上會進行水合作用。 –