簡體   English   中英

表單構建器中的Symfony2復合鍵約束

[英]Symfony2 composite key constraint in Form builder

將復合鍵驗證約束插入與FOSUserBundleUser實體相關聯的Form構建器中的最佳位置是什么?

讓我詳細說明。

我有一個擴展FOSUserBundle\\Model\\UserUser實體。 我添加了幾個字段(特別是team字段)。 每個User完全屬於一個Team

現在,我想制作一個注冊系統,使用戶可以直接(通過使用/register/{teamSlug}類的路徑)成為一個特定團隊的成員。 新用戶必須輸入他的電子郵件地址,但是電子郵件必須僅在團隊級別是唯一的。 此約束將轉換為UNIQUE KEY team_email (team_id, email)數據庫中的UNIQUE KEY team_email (team_id, email)

自然地,我將在數據庫表中定義一個唯一鍵,但這只能確保在嘗試進行無效寫入時拋出數據庫異常時不會插入任何數據。

我考慮@UniqueEntityUser實體上使用@UniqueEntity屬性,但這似乎不起作用:

(編輯:我添加了一條丟失的use聲明。)

use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 * @UniqueEntity(
 *     fields={"email", "team"},
 *     message="This email already exists in this team."
 * )
 */
class User extends BaseUser
{
    // ...
}

我發現的另一件事是回調assert 也許運行MyBundle\\Entity\\UserMyBundle\\Entity\\User的FormBuilder實例驗證運行時,我可以使用它來驗證團隊范圍中是否存在電子郵件,但是,這將破壞Entity的封裝,因為它要求Entity知道其自己的存儲庫,因此上。

這樣做的最佳方法是什么?

唯一實體可以正常工作,但您需要定義正確的驗證組才能使其與fos用戶一起使用

 @UniqueEntity( fields={"email", "team"}, groups={"Registration", "Profile"}, message="This email already exists in this team." ) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM