Невозможно прочитать аннотацию при использовании Symfony Validator как автономного

100
10

Я получаю эту ошибку:



Message: "[Semantical Error] The annotation "@Symfony\Component\Validator\Constraints\Length" in property

Пользователь:: $name не существует или не может быть автоматически загружен.



Это код в Github https://github.com/symfony/Validator


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

class User {
/**
* @Assert\Length(min = 3)
* @Assert\NotBlank
*/
private $name;

/**
* @Assert\Email
* @Assert\NotBlank
*/
private $email;

public function __construct($name, $email)
{
$this->name = $name;
$this->email = $email;
}

/**
* @Assert\True(message = "The user should have a Google Mail account")
*/
public function isGmailUser()
{
return false !== strpos($this->email, '@gmail.com');
}
}

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

$user = new User('John Doe', 'john@example.com');

$violations = $validator->validate($user);


Как я могу исправить эту проблему?

спросил(а) 2021-01-19T20:33:53+03:00 6 месяцев назад
1
Решение
109

Doctrine не использует autoload PHP, вы должны зарегистрироваться в autoloadRegistry:

AnnotationRegistry::registerAutoloadNamespace("Symfony\Component\Validator\Constraint", "path/to/symfony/library/validator");

ответил(а) 2021-01-19T20:33:53+03:00 6 месяцев назад
100

используйте Symfony\Component\Validator\Constraints as Assert;


    /**
* @var float $weight
*
* @ORM\Column(name="weight", type="decimal",precision=3,scale=2, nullable=true)
*
* @Assert\Range(
* min = "90",
* max = "350",
* minMessage = "You must weight at least 90",
* maxMessage = "You cannot weight more than 300"

* )

* @Assert\NotBlank(groups={"group one","goup 2"})
* @Assert\Regex(pattern= "/[0-9]/",message="Require number only")
*/
private $weight=0;

ответил(а) 2021-01-19T20:33:53+03:00 6 месяцев назад
45

Ограничение длины было добавлено в Symfony 2.1, поэтому вы не сможете использовать его, если используете Symfony 2.0.


См. документацию для ограничения длины.

ответил(а) 2021-01-19T20:33:53+03:00 6 месяцев назад
45

Используя composer, вместо ручной регистрации пространства имен валидатора, вы можете просто сделать

composer require validator

ответил(а) 2021-01-19T20:33:53+03:00 6 месяцев назад
46

Если вы используете Symfony/validator как автономный, вы должны вручную зарегистрировать пространство имен валидатора

$loader = require 'vendor/autoload.php';
AnnotationRegistry::registerLoader([$loader, 'loadClass']);

ответил(а) 2021-01-19T20:33:53+03:00 6 месяцев назад
45

В PHP и Doctrine есть ошибка, и иногда она путается с помощью use. Вы должны добавить комментарий PHPDoc к объявлению класса, и эта ошибка исчезнет.

ответил(а) 2021-01-19T20:33:53+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема