“表单”构建器中的Symfony2组合键约束

时间:2016-01-08 20:25:07

标签: php symfony doctrine-orm fosuserbundle

将复合键验证约束插入“表单”构建器的最佳位置是什么,该构建器与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实例的验证时是否存在团队范围中的电子邮件,但是,这将破坏实体的封装,因为它需要实体知道它自己的存储库,所以上。

这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

唯一实体工作正常,但您需要定义正确的验证组,以使其与fos用户一起使用

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