Symfony @Assert\Type("string") 验证通过整数值

Symfony @Assert\Type("string") validation passes with integer value

我在 symfony 4 中验证字符串类型的字段时遇到问题。这是一个示例:

<?php

class Foo {
    
    /**
     * @Assert\NotNull
     * @Assert\Type("string")
     *
     * @var string
     */
    protected string $uid;
}

当我像这样发送 (PUT) 请求时,它通过了:

{
    "uid": 5,
}

验证以相反的方式进行。如果我将字段设置为整数并传递一些字符串,如“test”,则正确验证。

这是因为整数在 PHP 中用作字符串时会自动解释为字符串。您需要使用 regex constraint,文档中的示例可以满足您的需求。像这样:

<?php

class Foo {
    
    /**
     * @Assert\NotNull
     * @Assert\Regex(
     *     pattern="/\d/",
     *     match=false,
     *     message="Your name cannot contain a number"
     * )
     *
     * @var string
     */
    protected string $uid;
}