UniqueEntity

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.3,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

UniqueEntity

验证Doctrine实体中的一个(或多个)特定字段是否惟一。例如,这通常用于防止新用户使用系统中已经存在的电子邮件地址注册。

另请参阅

如果要验证集合中的所有元素都是惟一的,请使用唯一约束

基本用法

假设你有一个用户具有电子邮件字段。您可以使用UniqueEntity约束来保证电子邮件字段在你的用户表的所有行之间保持唯一:

  • 注释
  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src /实体/ User.php名称空间应用程序实体使用学说ORM映射作为ORM//不要忘记下面的使用语句!!使用欧宝娱乐app下载地址学说验证器约束UniqueEntity使用欧宝娱乐app下载地址组件验证器约束作为断言/ * * *@ORM* \实体@UniqueEntity(“电子邮件”)* /用户/ * * *@ORM\列(name="email", type="string", length=255, unique=true) *@Assert\电子邮件* /受保护的电子邮件;}

谨慎

这个约束没有提供任何保护竞态条件.当外部流程在验证通过后持久化另一个实体,并且在该实体实际持久化到数据库之前持久化该实体时,可能会发生这种情况。

谨慎

此约束不能处理在尚未持久化为实体的项集合中找到的重复项。您需要创建自己的验证器来处理这种情况。

选项

新兴市场

类型字符串

用于进行查询以确定惟一性的实体管理器的名称。如果它为空,将为该类确定正确的实体管理器。因此,可能不需要使用此选项。

entityClass

类型字符串

默认情况下,为确保唯一性而执行的查询使用当前类实例的存储库。然而,在某些情况下,例如使用Doctrine继承映射时,您需要在不同的存储库中执行查询。使用此选项定义Doctrine实体的全限定类名(FQCN),该实体与您想要使用的存储库相关联。

errorPath

类型字符串默认的:中第一个字段的名称字段

如果实体违反约束,则错误消息将绑定到中的第一个字段字段.如果有多个字段,您可能希望将错误消息映射到另一个字段。

想想这个例子:

  • 注释
  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/ / src /实体/ Service.php名称空间应用程序实体使用学说ORM映射作为ORM使用欧宝娱乐app下载地址学说验证器约束UniqueEntity/ * * *@ORM* \实体@UniqueEntity(* fields={"host", "port"}, * errorPath="port", * message="此端口已在该主机上使用。"*) */服务/ * * *@ORM\ ManyToOne (targetEntity =“App \实体\主机”)* /公共宿主/ * * *@ORM\列(类型=“整数”)* /公共港口;}

现在,消息将被绑定到港口字段。

字段

类型数组|字符串默认的选项

这个必需的选项是这个实体应该是唯一的字段(或字段列表)。例如,如果同时指定电子邮件而且的名字场在一个单一UniqueEntity约束,那么它将强制组合值是唯一的(例如,两个用户可以有相同的电子邮件,只要他们也没有相同的名字)。

如果你需要两个字段分别是唯一的(例如,一个唯一的电子邮件而且一个独特的用户名),你用两个UniqueEntity条目,每个条目只有一个字段。

类型数组|字符串

它定义了该约束所属的一个或多个验证组。阅读更多验证组

ignoreNull

类型布尔默认的真正的

如果此选项设置为真正的,则约束将允许多个实体具有值。如果设置为,只有一个值是允许的-如果第二个实体也有值,验证将失败。

消息

类型字符串默认的此值已被使用。

当此约束失败时显示的消息。该消息总是映射到导致冲突的第一个字段,即使在约束中使用多个字段时也是如此。

消息可以包括{{value}}占位符显示无效实体的字符串表示形式。如果实体没有定义__toString ()方法,将使用以下泛型值:<新兴市场>"类__CLASS__的对象由<逗号分隔的id >标识"

您可以在此消息中使用以下参数:

参数 描述
{{value}} 当前(无效)值

有效载荷

类型混合默认的

此选项可用于将任意特定于领域的数据附加到约束。已配置的有效负载不由Validator组件使用,但其处理完全取决于您。

例如,您可能想使用若干错误级别根据错误的严重程度,在前端以不同的方式呈现失败的约束。

repositoryMethod

类型字符串默认的findBy

用于确定惟一性的存储库方法的名称。如果它是空的,findBy ()将被使用。该方法接收参数afieldName =>值关联数组(其中字段名中是否配置了每个字段字段选项)。该方法应该返回一个可数PHP变量

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。