Php Zend Framework 2-如何使用注释为实体设置表单验证规则?
如何为电子邮件地址设置@Annotation\Validator以确保其唯一性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
/**
* @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”})