Voilà un exemple de contrainte qui permet d’ajouter une erreur sur un champ spécifique, ce qui peut être utile lorsque l’on ajoute des Validator au niveau d’une classe
<?php
class ObjectValidator extends ConstraintValidator
{
public function isValid($value, Constraint $constraint)
{
if ($value->getType() == 1) {
// si l'objet a un type 1, le champ foo ne doit pas être vide
if ($value->getFoo() == '') {
// on récupère la propriété courante
$oldPath = $this->context->getPropertyPath();
// on ce place a l'endroit où l'on veut ajouter l'erreur
$this->context->setPropertyPath(empty($oldPath)? 'data': $oldPath.'.data');
$this->context->addViolation($constraint->message, array(), null);
// on revient sur la propriété courante
$this->context->setPropertyPath($oldPath);
}
}
return true;
}
}