Нужно ли регистрировать свои собственные валидаторы в Symfony?

я читал документация по изготовлению пользовательских валидаторов и в нем не говорится, что вы должны регистрировать созданные пользователем валидаторы, но что еще может вызвать эту проблему?

Я создал пользовательское ограничение:

namespace Lib\Validators\UniqueValidator\Constraint;

use Symfony\Component\Validator\Constraint;

/**
* @Annotation
*/
class Email extends Constraint {

public $message = "The email entered already exists.";
}

и пользовательский валидатор:

namespace Lib\Validators\UniqueValidator;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class EmailValidator extends ConstraintValidator {

public function validate($value, Constraint $constraint) {
var_dump($value, $constraint); exit;
}
}

и тогда, когда я иду использовать его:

The annotation "@\Lib\Validators\UniqueValidator\Constraint\Email" in property ImageUploader\Models\User::$email does not exist, or could not be auto-loaded.

И я не уверен почему. Есть ли орфографическая ошибка, которую я не вижу? Я проверил все 50 раз.

В моем bootstrap.php Я имею:

$loader = require 'vendor/autoload.php';
\Doctrine\Common\Annotations\AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

Но это для валидаторов Symfony, нужно ли делать что-то похожее для моих пользовательских? Я должен также упомянуть, что я использую компонент валидаторов Symfony и не полный стек Symfony.

Для просмотра структуры каталогов я сделал:

введите описание изображения здесь

\Lib указывает на основание lib/ Я уверен, что этот стандарт является стандартным, и он скоро будет исправлен.

1

Решение

Ваш пользовательский валидатор должен находиться в той же папке, что и ваше ограничение. Согласно вашим пространствам имен, это не так.

Если вы хотите разделить их, вы можете переопределить validatedBy() метод вашего Constraint учебный класс :

public function validatedBy()
{
return get_class($this).'Validator';
}
2

Другие решения

Других решений пока нет …