Я слежу за кулинарной книгой о том, как создать валидатор ограничения классов, и сейчас я нахожусь в точке, где я собираюсь добавить нарушение в функцию validate()
.
Однако моя IDE уведомляет меня о том, что функции addViolation()
и addViolationAt()
устарели.
Может ли кто-то указать мне в правильном направлении, как использовать функцию Context\ExecutionContextInterface::buildViolation()
?
$this->context
– это экземпляр Symfony\Component\Validator\ExecutionContext
class ProtocolClassValidator extends ConstraintValidator { public function validate($protocol, Constraint $constraint) { if ($protocol->getFoo() != $protocol->getBar()) { $this->context->addViolationAt( 'foo', $constraint->message, array(), null ); } } }
При изменении вызова $this->context->addViolationAt()
на просто $this->context->buildViolation()
я получаю следующее исключение:
UndefinedMethodException: Попытка вызвать метод «buildViolation» в классе «Symfony \ Component \ Validator \ ExecutionContext» в разделительной строке 23. Вы имели в виду позвонить: «addViolation»?
и строка 23 имеет следующий код:
$builder = $this->context->buildViolation($constraint->message) ->atPath('formField') ->addViolation();
поле$builder = $this->context->buildViolation($constraint->message) ->atPath('formField') ->addViolation();
addViolation
и addViolationAt
устарели от 2.5, но не будут удалены до 3.0, поэтому они все еще пригодны для использования в течение хорошего времени.
Однако … взято из UPGRADE FROM 2.x to 3.0 log …
The method `addViolationAt()` was removed. You should use `buildViolation()` instead. Before: $context->addViolationAt('property', 'The value {{ value }} is invalid.', array( '{{ value }}' => $invalidValue, )); After: $context->buildViolation('The value {{ value }} is invalid.') ->atPath('property') ->setParameter('{{ value }}', $invalidValue) ->addViolation(); ));
С немного более взятым из Context / ExecutionContextInterface …
/** * Returns a builder for adding a violation with extended information. * * Call {@link ConstraintViolationBuilderInterface::addViolation()} to * add the violation when you're done with the configuration: * * $context->buildViolation('Please enter a number between %min% and %max.') * ->setParameter('%min%', 3) * ->setParameter('%max%', 10) * ->setTranslationDomain('number_validation') * ->addViolation(); * * @param string $message The error message * @param array $parameters The parameters substituted in the error message * * @return ConstraintViolationBuilderInterface The violation builder */ public function buildViolation($message, array $parameters = array());