recherche

Maison  >  Questions et réponses  >  le corps du texte

Valider l'annotation de contrainte d'un champ par rapport à un autre champ

<p>J'ai cette classe d'entité dans Symfony/5.4 :</p> <pre class="brush:php;toolbar:false;">utiliser DoctrineORMMapping comme ORM ; utilisez SymfonyComponentValidatorConstraints comme Assert ; devoirs de classe { public const SALARY_RANGES = [ 'Rouge', 'Vert', nul, ]; /*** @ORMColumn(longueur=255, nullable=true) * @AssertChoice(choices=Assignments::SALARY_RANGES, strict=true)*/ private ?string $salaryRange; /*** @ORMManyToOne(targetEntity="Employé", inversedBy="assignments") * @ORMJoinColumn(name="employee_id", referencedColumnName="id", onDelete="CASCADE")*/ privé ?Employé $employé; }</pré> <p>Je dois m'assurer que si l'employé n'est pas nul, alors salaireRange a une valeur non nulle et vice versa. Est-il possible d'utiliser des annotations de contrainte pour appliquer cette exigence ?</p> <p>J'ai essayé d'utiliser @AssertCallback mais je n'arrive pas à comprendre comment obtenir la valeur de l'autre champ. Ce n'est peut-être même pas le bon outil. </p> <pre class="brush:php;toolbar:false;">/*** @AssertCallback({"ExampleValidator", "assertEmployeeOnlyCallback"})*/</pre> <pre class="brush:php;toolbar:false;">fonction statique publique assertEmployeeOnlyCallback(mixed $data, ExecutionContextInterface $context): void { // `$data` contient la valeur de `salaryRange` mais où est `employee` ? }</pré> <p><br /></p>
P粉321676640P粉321676640495 Il y a quelques jours554

répondre à tous(1)je répondrai

  • P粉107991030

    P粉1079910302023-07-24 10:28:57

    Suivez simplement la documentation.

    https://symfony.com/doc/5.3/reference/constraints/Callback.html

    class Author
    {
        // ...
        private int $field = 1;
        private string $otherField;
       /**
        * @Assert\Callback
        */    
        public function validate(ExecutionContextInterface $context, mixed $payload): void
        {
            
            if ($this->field > 1 && $this->otherField != '') {
                $context->buildViolation('Your validation message')
                    ->atPath('toherField')
                    ->addViolation();
            }
        }
    }

    répondre
    0
  • Annulerrépondre