Php 如何验证非实体对象

Php 如何验证非实体对象,php,symfony,validation,symfony4,symfony-validator,Php,Symfony,Validation,Symfony4,Symfony Validator,我有一些$customObject,它是CustomClass的一个实例,我想用Symfony验证来验证它。 CustomClass不是条令实体类 这是我的课程: use Symfony\Component\Validator\Constraints as Assert; class SomeClass { /** * @Assert\NotBlank(message="Status should not be empty") * @Assert\Choices({"20

我有一些$customObject,它是CustomClass的一个实例,我想用Symfony验证来验证它。 CustomClass不是条令实体类

这是我的课程:

use Symfony\Component\Validator\Constraints as Assert;
class SomeClass {
    /**
    * @Assert\NotBlank(message="Status should not be empty")
    * @Assert\Choices({"200", "201"})
    */
    protected $status;

    /**
    * @Assert\Type("string")
    * @Assert\NotBlank(message="Content should not be empty")
    */
    protected $content;
}
正在尝试验证它:

$constraints = Validation::createValidator()->validate($customObject);
但即使对象无效,约束计数也始终为0,似乎注释解析器忽略了此对象注释。在同一项目中的条令实体上工作良好。
有什么想法吗

您需要获得验证程序服务:

没有自动布线

$validator = $this->get('validator');
自动布线

use Symfony\Component\Validator\Validator\ValidatorInterface;
...
public function myMethod(ValidatorInterface $validator)
然后

$errors = $validator->validate($customObject);
您的配置中是否有:

framework:
    validation: { enable_annotations: true }
请参见此处的更多信息:

谢谢,这对我很有用。不知道如果直接创建验证(无自动连接或不作为服务创建),则使用对象批注的验证将不起作用。如果您自己创建验证程序实例,则需要确保启用默认禁用的批注加载:
validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator()
但是您确实应该使用该服务,而不是在每次需要使用时都配置验证器(因此,当验证器配置更改时,必须更改许多位置)。