Answer the question
In order to leave comments, you need to log in
How to create custom validator in symfony?
How to create custom validator in symfony? I kind of read https://symfony.com/doc/4.4/validation/custom_cons... but I can't figure it out. I need validation to happen through an annotation like this.
/**
* @Assert\NotBlank(message="Поле не должно быть пустым *")
*/
private $name;
Answer the question
In order to leave comments, you need to log in
I kind of read https://symfony.com/doc/4.4/validation/custom_cons... but I can't figure it out.
/**
* @Annotation
*/
class ContainsAlphanumeric extends Constraint
{
public function validate($value, Constraint $constraint) {}
}
размер
, and if we don’t pass it, then its value will be 55 (well, that’s how we want it). Moreover, this will not apply to the field that we are validating, but to the constraint, that is, what it will give to the validator. Well, for example, age or a certain ping, whatever, in general, focusing on which validator will apply some logic./**
* @Annotation
*/
final class AnyConstraint
{
/**
* @Required
* @var int
*/
public $size = 55;
/**
* Вот тут мы укажем некий валидатор, тот класс, который и будет валидировать наше значение
* Дял удобства он будет называться также + слово Validator, в нашем случае AnyConstraintValidator
*/
public function validatedBy()
{
return \get_class($this).'Validator';
}
}
class AnyConstraintValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint): void
{
// Тут логика, при которой или все пройдет до return - все отлично
// Или вообще исключение вывалится (если пришло чего-то не то)
// Или (для чего и используется валидатор) создастся violation
// например число в объекте больше того, которое мы указали в size (по дефолту если не указали: 55)
if($value > $constraint->size) {
$this->context->buildViolation('Тут пинг пришел вообще большой — такой нельзя, брат')
->setParameter('{{ string }}', $value)
->addViolation();
}
}
}
class AnyEntity
{
/**
* Если значение больше 55 — то не пройдет валидацию
* @AnyConstraint(120)
*/
protected $name;
}
@Target({"PROPERTY", "METHOD", "ANNOTATION"})
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question