将复合键验证约束插入“表单”构建器的最佳位置是什么,该构建器与FOSUserBundle
的{{1}}实体绑定?
让我详细说明。
我有一个扩展User
的{{1}}实体。我添加了几个字段(User
字段,具体而言)。每个FOSUserBundle\Model\User
只属于一个team
。
现在,我想创建一个注册系统,允许用户直接成为一个特定团队的成员(通过User
之类的路由)。新用户必须输入他的电子邮件地址,但电子邮件必须仅在团队级别上是唯一的。此约束转换为所选数据库中的Team
。
当然,我将在数据库表中定义一个唯一键,但这只会确保没有插入数据,同时在尝试无效写入时抛出数据库异常。
我考虑在/register/{teamSlug}
实体上使用UNIQUE KEY team_email (team_id, email)
属性,但它似乎不起作用:
(编辑:我添加了一条缺失的@UniqueEntity
语句。)
User
我发现的另一件事是the callback assert。也许我可以使用它来验证在运行use
的data_class的FormBuilder实例的验证时是否存在团队范围中的电子邮件,但是,这将破坏实体的封装,因为它需要实体知道它自己的存储库,所以上。
这样做的最佳方法是什么?
答案 0 :(得分:0)
唯一实体工作正常,但您需要定义正确的验证组,以使其与fos用户一起使用
@UniqueEntity( fields={"email", "team"}, groups={"Registration", "Profile"}, message="This email already exists in this team." )