Пользовательские ограничения Symfony 4 atPath не работают - PullRequest
0 голосов
/ 29 марта 2019

У меня есть форма с типом даты и типом флажка, тип даты является обязательным полем только при установленном флажке.

Таким образом, флажок называется 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 (), так что я могу сказать ему, какое поле формы дляотобразить ошибку, поскольку я передаю всю сущность в валидатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...