2011-09-19 130 views
7

我使用FOSUserBundleSymfony2中,我需要能夠註冊一個用戶沒有驗證電子郵件是否是唯一的,我只需要一個有效的電子郵件地址,以便許多用戶可以有相同的電子郵件(我知道這很奇怪,但我需要它)。如何Symfony2的束覆蓋的實體

我的實體「用戶」在一個捆綁延伸FOSUserBundle,是有可能覆蓋emailCanonical的列定義消除唯一的參數,並從FormType刪除驗證?

我使用Annotation來映射我的實體和YML以驗證我的表單。

回答

0

我發現了一些東西,它部分是解決方法,不是可行的解決方案。

問題分爲兩部分:表單和模型。

對於形式: 要覆蓋FOSUserBundle登記表的唯一約束,您可以修改註冊驗證組在app /配置/ config.yml:

fos_user: 
    registration: 
    validation_groups: [YourValidationGroup] 

對於模型: 我沒有找到一個好的解決方案,而不覆蓋所有的模型。 Doctrine2明確告訴你不能覆蓋Mapped Class的屬性。所以我做了一次遷移,用DoctrineMigrationBundle刪除了唯一的約束索引...我對這個解決方案並不感到自豪,但它起作用,它讓我保存了重複的電子郵件。

如果您有更好的解決方案,請不要猶豫!

4

幾周前我有一個similar issue。唯一的解決辦法是改爲擴展實體模型:

use FOS\UserBundle\Model\User as BaseUser; 

class User extends BaseUser 

的缺點是,你也必須一切從用戶FOS實體複製到用戶的實體。另一方面,您可以根據需要調整功能。

+0

的FOS用戶實體包含不外乎:'抽象類用戶擴展AbstractUser { }' 你的意思_The缺點是,你也必須一切從FOS用戶模型複製到您的用戶模型,然後有你的實體擴展你的新用戶Model_? – carbocation

+0

對不起,我想起初我誤解了這個問題。我遇到了需要創建更多定製實體的情況。在我自己的包中,我創建了新的用戶實體,該實體從FOSUserBundle擴展了'Model \ User'並覆蓋了它的所有方法和變量。然後,我創建了屬於不同驗證組的新驗證規則(通過同一實體中的註釋)(如您在答案中所述)。我原來的問題在這裏:https://github.com/FriendsOfSymfony/FOSUserBundle/issues/338。這與你所問的並不是同一個問題,但它可以幫助你。 –