Php Zend Framework 2-如何使用注释为实体设置表单验证规则?

Php Zend Framework 2-如何使用注释为实体设置表单验证规则?,php,validation,doctrine-orm,annotations,zend-framework2,Php,Validation,Doctrine Orm,Annotations,Zend Framework2,如何为电子邮件地址设置@Annotation\Validator以确保其唯一性 /** * @var string * * @ORM\Column(name="email", type="string", unique=true, length=255, nullable=false) * @Annotation\Type("Zend\Form\Element\Email") * @Annotation\Validator({"name":"EmailAddress", "option

如何为电子邮件地址设置@Annotation\Validator以确保其唯一性

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", unique=true, length=255, nullable=false)
 * @Annotation\Type("Zend\Form\Element\Email")
 * @Annotation\Validator({"name":"EmailAddress", "options": {"unique":"true"}})
 * @Annotation\ErrorMessage("Invalid Email Address")
 * @Annotation\Attributes({"placeholder":"Your Email Address"})
 * @Annotation\Options({"label":"Your email address:"})
 */
public $email;
如果电子邮件格式错误或字符无效,它会验证电子邮件并显示错误消息,但如果电子邮件重复,则会出现以下错误:

Doctrine\DBAL\DBALException

File:
doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:91
Message:
An exception occurred while executing 'INSERT INTO subscriber (email, token, active) VALUES (?, ?, ?)' with params ["me@example.com", {}, 1]:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'me@example.com' for key 'email'

通过使用@uniqueConstraint,请参见此处:


你好。你应该让我们知道你试过什么。这将使帮助您变得更容易。正如我从条令文档中了解到的那样,@uniqueConstraint仅在SchemaTool模式生成上下文中有意义,它确实以这种方式工作,或者以使用“@ORM\Column(name=“email”,type=“string”之前的方式工作,unique=true…'我试图完成的是使用@Annotation\Validator添加验证规则,因此除非电子邮件是唯一的,否则不会执行保存实体的尝试,例如字符串长度@Annotation\Validator({“name”:“StringLength”,“options”:{“min”:“2”,“max=”255“}})您是否尝试了NoRecordExists验证程序?对。我在手动创建表单时使用了DOCTRINMODule\validator\NoObjectExists。但NoRecordExists的问题在于,它找不到DB适配器,因为NoObjectExists缺少实体管理器,我不知道是否可以将其指定为注释选项@annotation\Validator({“name”:“doctrimemodule\Validator\NoObjectExists”,“options”:{“fields”=“email”}}})@Annotation\Validator({“name”:“Zend\Validator\Db\NoRecordExists”,“options”:{“table”=“subscriber”,“field”=“email”})