suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Validieren Sie die Einschränkungsanmerkung eines Felds anhand eines anderen Felds

<p>Ich habe diese Entitätsklasse in Symfony/5.4:</p> <pre class="brush:php;toolbar:false;">DoctrineORMMapping als ORM verwenden; Verwenden Sie SymfonyComponentValidatorConstraints als Assert; Klassenzuweisungen { öffentliche Konstante SALARY_RANGES = [ 'Rot', 'Grün', Null, ]; /*** @ORMColumn(length=255, nullable=true) * @AssertChoice(choices=Assignments::SALARY_RANGES, strict=true)*/ privat ?string $salaryRange; /*** @ORMManyToOne(targetEntity="Employee", inversedBy="assignments") * @ORMJoinColumn(name="employee_id", referencedColumnName="id", onDelete="CASCADE")*/ privat ?Mitarbeiter $Mitarbeiter; }</pre> <p>Ich muss sicherstellen, dass, wenn „employee“ nicht null ist, „salaryRange“ einen Wert ungleich null hat und umgekehrt. Ist es möglich, Einschränkungsanmerkungen zu verwenden, um diese Anforderung durchzusetzen?</p> <p>Ich habe versucht, @AssertCallback zu verwenden, kann aber nicht herausfinden, wie ich den Wert des anderen Felds ermitteln kann. Vielleicht ist es nicht einmal das richtige Werkzeug. </p> <pre class="brush:php;toolbar:false;">/*** @AssertCallback({"ExampleValidator", "assertEmployeeOnlyCallback"})*/</pre> <pre class="brush:php;toolbar:false;">öffentliche statische Funktion affirmEmployeeOnlyCallback(mixed $data, ExecutionContextInterface $context): void { // „$data“ enthält den Wert von „salaryRange“, aber wo ist „employee“? }</pre> <p><br /></p>
P粉321676640P粉321676640534 Tage vor592

Antworte allen(1)Ich werde antworten

  • P粉107991030

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

    只需按照文档进行操作。

    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();
            }
        }
    }

    Antwort
    0
  • StornierenAntwort