У меня есть форма с типом даты и типом флажка, тип даты является обязательным полем только при установленном флажке.
Таким образом, флажок называется overrideDates, а поле даты - overrideDate
Итак, я создал следующее ограничение:
<?php
namespace App\Validator\Constraints\Instruction;
use App\Validator\Validators\Instruction\MainInstructionValidator;
use Symfony\Component\Validator\Constraint;
/**
* Class MainInstructionConstraint
* @package App\Validator\Constraints\Instruction
* @Annotation
*/
class MainInstructionConstraint extends Constraint{
/**
* @var string
*/
public $overrideDatesError = "You Must Enter An Override Date";
/**
* @return string
*/
public function getTargets() : string{
return self::CLASS_CONSTRAINT;
}
/**
* @return string
*/
public function validatedBy() : string{
return MainInstructionValidator::class;
}
}
И вот такой валидатор:
<?php
namespace App\Validator\Validators\Instruction;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
/**
* Class MainInstructionValidator
* @package App\Validator\Validators\Instruction
*/
class MainInstructionValidator extends ConstraintValidator{
/**
* @param mixed $instruction
* @param Constraint $constraint
*/
public function validate($instruction, Constraint $constraint){
if($instruction->isOverridingDates()){
// make sure the override date is set
if(!is_null($instruction->getOverrideDate()) || !is_a($instruction->getOverrideDate(),'DateTime')){
$this->context->buildViolation($constraint->overrideDatesError)
->atPath('overrideDate')->addViolation();
}
}
}
}
Проверка работает отлично, и появляется сообщение об ошибкеиз ограничения нормально, но по какой-то причине он не отображается в форме из следующего:
form_errors(form.overrideDate)
У меня сложилось впечатление, что именно для этого atPath (), так что я могу сказать ему, какое поле формы дляотобразить ошибку, поскольку я передаю всю сущность в валидатор.