首页 > 解决方案 > Symfony 5 - 现在工作的正则表达式验证器不起作用

问题描述

所以我有一个带有@Assert/Regex 的实体

/**
     * @var string
     *
     * @ORM\Column(name="firstname", type="string", length=30, nullable=false, options={"comment"="input#text&[A-Za-z \-\'àâäçéèêëîïôöùûüÿæœÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ]{2,30}@Prénom"})
     * @Assert\NotBlank (
     *     message="Le champs [prénom] ne peut être vide",
     *     groups={"registration"}
     * )
     * @Assert\Regex (
     *     pattern="/^[A-Za-z \-\'àâäçéèêëîïôöùûüÿæœÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ]{2,30}$/",
     *     message="Champs prénom : La saisie est invalide (min: 2, max: 30)")
     */
    private $firstname;

    /**
     * @var string
     *
     * @ORM\Column(name="lastname", type="string", length=30, nullable=false, options={"comment"="input#text&[A-Za-z \-\'àâäçéèêëîïôöùûüÿæœÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ]{2,30}@Nom"})
     * @Assert\NotBlank (
     *     message="Le champs [nom] ne peut être vide",
     *     groups={"registration"}
     * )
     * @Assert\Regex (
     *     pattern="/^[A-Za-z \-\'àâäçéèêëîïôöùûüÿæœÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒ]{2,30}$/",
     *     message="Champs nom : La saisie est invalide (min: 2, max: 30)")
     */
    private $lastname;

而且我的控制器是这样的(我故意删除了大部分代码以保持其易读性)

public function register(ValidatorInterface $validator, EntityManagerInterface $emi): Response
{
    $newUsers = new Users();
            
    // Setting the values
    $newUsers
        ->setFirstname($request->get('firstname'))
        ->setLastname($request->get('lastname'));

    $errorsUsers = $validator->validate($newUsers, null, ['registration']);
    foreach ($errorsUsers as $v){
        $msgErrors .= "\n- " . $v->getMessage() . ".";
    }
}

在一切正常之前。现在 Assert\NotBlank 仍在工作,但 Assert\Regex 没有。就像,它甚至没有比较它。

我试过 :

我不知道为什么它不再工作了,这就是为什么我讨厌 symfony 的原因,因为它甚至没有给出错误或消息。

如果有人遇到此问题并有解决方案,请告诉我。

提前致谢。

标签: regexvalidationsymfony5

解决方案


好的,问题是我也没有将组放在正则表达式中。

因此,对于您在 var 上添加的每个 Assert,您需要指定组。

我没有想到,因为在文档中它说如果您不指定组,则意味着它适用于所有内容。显然不是。

谢谢医生。


推荐阅读