如何解决Symfony:约束中的验证集不起作用
当我检查更新到Symfony 2.x-> Symfony 4.4的应用程序的运行时,我发现验证效果不佳。
即使设置了验证,即使输入了被验证翻转的值,也不会翻转并保存。
由于 Symfony 更新,这些功能是否有任何变化?
Html5EmailValidator.php
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class Html5EmailValidator extends ConstraintValidator
{
/**
* @see http://www.w3.org/TR/html5/forms.html#valid-e-mail-address
* @see http://momdo.s35.xrea.com/web-html-test/spec/html5-dev/forms.html#valid-e-mail-address
*/
const PATTERN = '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/';
/**
* {@inheritdoc}
*/
public function validate($value,Constraint $constraint)
{
if ($value === null || $value === '') {
return;
}
if (!preg_match(self::PATTERN,$value,$matches)) {
$this->context->addViolation($constraint->message);
}
}
}
电子邮件.php
use Symfony\Component\Validator\Constraint;
/**
* E-mail address constraint equivalent to HTML5 type = email check
*/
class Html5Email extends Constraint
{
public $message = 'This value is not a valid email address.';
/**
* {@inheritdoc}
*/
public function validatedBy()
{
return 'Html5Email';
}
}
services.yaml
common.validator.html5EmailValidator:
class: AppBundle\Validator\Constraints\Html5EmailValidator
tags:
- { name: validator.constraint_validator,alias: Html5Email }
员工.php
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use AppBundle\Model\Lib\Parameters;
use Symfony\Component\Security\Core\User\EquatableInterface;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass="AppBundle\Model\Repository\StaffRepository")
* @ORM\Table(name="staff",uniqueConstraints={
* @ORM\UniqueConstraint(name="idx_staff_unique",columns={"staff_login_id"}),* @ORM\UniqueConstraint(name="idx_image_mail_unique",columns={"image_mail"})
* })
* @ORM\HasLifecycleCallbacks
*/
class Staff implements AdvancedUserInterface,\Serializable,EquatableInterface
{
/**
*
* @ORM\Column(name="staff_mail",type="string",length=255,nullable=true,options={
* "comment"="staffmailaddress"
* })
*/
protected $staffMail;
/**
* Set staffMail
*
* @param string $staffMail
* @return Staff
*/
public function setStaffMail($staffMail)
{
$this->staffMail = $staffMail;
return $this;
}
/**
* Get staffMail
*
* @return string
*/
public function getStaffMail()
{
return $this->staffMail;
}
验证.yaml
AppBundle\Model\Entity\Staff:
constraints:
- AppBundle\Validator\Constraints\Staff:
groups: [hqNew,hqEdit]
getters:
staffMail:
- Length: { max: 200,groups: [hqNew,hqInitialSetting,hqEdit] }
- AppBundle\Validator\Constraints\Html5Email:
groups: [hqNew,hqEdit]
尝试错误 HTML5Email.php
/**
* @Annotation
*/
class Html5Email extends Constraint
{
public $message = 'This value is not a valid email address.';
/**
* {@inheritdoc}
*/
public function validatedBy()
{
return 'AppBundle\Validator\Constraints\Html5EmailValidator';
}
}
员工.php
use AppBundle\Validator\Constraints\Html5Email as Html5Email;
/*
* @Html5Email
* @ORM\Column(name="staff_mail",nullabl e=true,options={
* "comment"="staffemailaddress"
* })
*/
protected $staffMail;
解决方法
我可以通过更改为以下形式来解决问题。 Html5EmailValidator.php
if (!preg_match(self::PATTERN,$value,$matches)) {
$this->context->buildViolation($constraint->message)
->addViolation();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。