I suggest you take a look at the Custom Validator , especially Class Conformity Check .
I will not copy all the code, just the parts that you have to change.
Extends the Constraint class.
src / Acme / DemoBundle / Validator / Constraints / CheckTwoFields.php
<?php namespace Acme\DemoBundle\Validator\Constraints; use Symfony\Component\Validator\Constraint; class CheckTwoFields extends Constraint { public $message = 'You must fill the foo or bar field.'; public function validatedBy() { return 'CheckTwoFieldsValidator'; } public function getTargets() { return self::CLASS_CONSTRAINT; } }
Define a validator by extending the ConstraintValidator class, foo and bar are the 2 fields you want to check:
src / Acme / DemoBundle / Validator / Constraints / CheckTwoFieldsValidator.php
namespace Acme\DemoBundle\Validator\Constraints; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; class CheckTwoFieldsValidator extends ConstraintValidator { public function validate($protocol, Constraint $constraint) { if ((empty($protocol->getFoo())) && (empty($protocol->getBar()))) { $this->context->addViolationAt('foo', $constraint->message, array(), null); } } }
Use the validator:
src / Acme / DemoBundle / Resources / config / validation.yml
Acme\DemoBundle\Entity\AcmeEntity: constraints: - Acme\DemoBundle\Validator\Constraints\CheckTwoFields: ~
source share