2011-08-11 23 views
4

Hy guys,FOSUserBundle物業從另一個實體登記表

我決定使用FOSUserBundle處理我的應用程序中的用戶身份驗證。 在我的申請中,公司可以註冊他們的詳細信息(姓名,地址等)。

因此,我決定創建一個名爲Company的實體來存放公司相關數據和一個名爲User的實體,以分別保留來自FOSUserBundle的用戶數據。

我開始覆蓋默認註冊表單,因爲它在文檔Overriding Default FOSUserBundle Forms中有描述,但問題是我無法將我的字段從公司添加到表單,它總是嘗試從用戶實體進行訪問(可以提議因爲那個與FOSUserBundle有關)。

有沒有辦法將公司實體字段放在FOSUser註冊表中?

我不想通過使用公司作爲FOSUser的基礎實體並將所有字段(用戶名,電子郵件,密碼等)添加到數據模型中。

最好的問候,

回答

5

從語義上講,User不必是一個人,所以我認爲沒有理由對一個公司是你的應用程序的用戶。我也沒有理由在你的數據庫中有兩個單獨的表。

我會創建一個單獨的公司類,它擴展了用戶等級:

fos_user: 
    user_class: Acme\Bundle\AcmeBundle\Entity\Company 

現在UserBundle知道:

namespace Acme\Bundle\AcmeBundle\Entity; 

use FOS\UserBundle\Entity\User; 

class Company extends User 
{ 
    // Your company related fields and related getters/setters go here. 
} 

然後從您的配置(app/config/config.yml如)覆蓋用戶類該類用作User。設置您的自定義課程後,您可以覆蓋RegistrationFormType以包含您的自定義字段。

但是,如果你仍然希望在你的應用程序中使用兩個獨立的實體,我建議你通過One-To-One relationship它們連接起來,然後按照有關embedding a single object的文檔的形式嵌入您的Company實體RegistrationFormType

參考:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.2.0/Resources/doc/overriding_forms.md