О методе ->validatedBy()
, возвращение простого имени класса будет работать, только если ваш класс валидатора не имеет никакой зависимости, потому что валидатор попытается создать его, используя что-то простое, например new $classname()
.Единственная проблема (если это действительно проблема ...) с использованием имени службы заключается в том, что вы связываете свое ограничение с FrameworkBundle.
Метод ->getRequiredOptions()
по умолчанию пуст, поэтому, если у вас есть какие-либо требуемыеопция, это хорошая практика, переопределите этот метод.
Метод ->getTargets()
по умолчанию уже self::PROPERTY_CONSTRAINT
.Вы должны переопределить его, только если вы хотите, чтобы ваше ограничение работало на весь класс self::CLASS_CONSTRAINT
(вы даже можете вернуть массив, если хотите, чтобы ваше ограничение работало в обоих случаях).
В определении службы высделал выбор в пользу использования %my.validator.unique.class% parameter to store the class name for the
my.validator.unique`.
Что касается метода ->getName()
, он является частью интерфейса Extension
.Если вы решите добавить некоторые параметры под ключом my
app/config/config.yml
, они будут переданы в качестве первого аргумента метода ->load()
.
name
тега будет использоватьсяFrameworkBundle, чтобы найти все службы проверки ограничений и зарегистрировать их в ConstraintValidatorFactory
(часть, которая отвечает за возврат правильного средства проверки для данного ограничения).alias
должна совпадать со строкой, возвращаемой методом ->validatedBy()
.
И вы правы, в регистрации пространства имен нет необходимости.