I have been following the cookbook on how to create a class constraint validator and right now I am at the point where I am about to add the violation in the validate()
function.
However my IDE notifies me the functions addViolation()
and addViolationAt()
are deprecated.
Can someone point me in the right direction on how to use the Context\ExecutionContextInterface::buildViolation()
function instead?
$this->context
is an instance of 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
);
}
}
}
When changing the call $this->context->addViolationAt()
to simply $this->context->buildViolation()
, I get the following Exception:
UndefinedMethodException: Attempted to call method "buildViolation" on class "Symfony\Component\Validator\ExecutionContext" in stripped path line 23. Did you mean to call: "addViolation"?
and line 23 has the following code:
$builder = $this->context->buildViolation($constraint->message)
->atPath('formField')
->addViolation();
addViolation
and addViolationAt
are deprecated from 2.5 but won't be removed until 3.0 so they are still usable for a good time.
However... taken from the the 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();
));
With a bit more taken from 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());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With