Php Symfony验证程序模块无法自动加载批注

Php Symfony验证程序模块无法自动加载批注,php,symfony,validation,Php,Symfony,Validation,我正在独立运行symfony/validator v3.4.4,试图验证对象,但遇到了一个错误,条令无法找到验证注释类 我错过了什么 use Symfony\Component\Validator\Validation; use Symfony\Component\Validator\Constraints as Assert; require_once('vendor/autoload.php'); $validator = Validation::createValidatorBuild

我正在独立运行symfony/validator v3.4.4,试图验证对象,但遇到了一个错误,条令无法找到验证注释类

我错过了什么

use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints as Assert;

require_once('vendor/autoload.php');

$validator = Validation::createValidatorBuilder()
    ->enableAnnotationMapping()
    ->getValidator();


class Foo {

    /**
     * @Assert\NotBlank()
     */
    public $userId;

    function __construct($userId) {
        $this->userId = $userId;
    }
}

class Bar {}

$foo = new Foo(1);
$bar = new Bar();

var_dump($validator->validate($bar));

/** 
 * =>
 * object(Symfony\Component\Validator\ConstraintViolationList)#22 (1) {
 * ["violations":"Symfony\Component\Validator\ConstraintViolationList":private]=>
 *  array(0) {
 * }
 * }
 */

var_dump($validator->validate($foo));

/**
 * =>
 * Fatal error: Uncaught exception
 * 'Doctrine\Common\Annotations\AnnotationException'
 * with message '[Semantical Error] The annotation
 * "@Symfony\Component\Validator\Constraints\NotBlank" in property Foo::$userId
 * does not exist, or could not be auto-loaded.' in
 * /home/readitla/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php:54
 */

提前感谢

我以前在测试中遇到过同样的错误,我希望通过实际的验证器而不是模拟

可以通过调用类\u existsAssert\NotBlank::class来修复此问题:


我不太清楚为什么会发生这种情况,但由于某些原因,在自动加载程序中注册类是不够的。似乎批注不会触发自动加载或类似的操作。

这就成功了!我知道条令注释库有自己的自动加载器。我敢打赌symfony会注册他们自己的自动加载器,这在某种程度上取决于现有的自动加载器。非常好。无论如何,谢谢你的帮助。你救了我一个非常沮丧的早晨。和同样的问题作斗争。如何让symfony自动加载这些类?
<?php

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Validation;

require_once __DIR__ . '/vendor/autoload.php';

class_exists(Assert\NotBlank::class);

$validator = Validation::createValidatorBuilder()
    ->enableAnnotationMapping()
    ->getValidator();

class Foo
{
    /**
     * @Assert\NotBlank()
     */
    public $id;
}

$foo = new Foo();
$foo->id = 123;

var_dump($validator->validate($foo));
/*
object(Symfony\Component\Validator\ConstraintViolationList)#20 (1) {
  ["violations":"Symfony\Component\Validator\ConstraintViolationList":private]=>
  array(0) {
  }
}
*/