Validieren Sie die Einschränkungsanmerkung eines Felds anhand eines anderen Felds
P粉321676640
P粉321676640 2023-07-23 17:52:28
0
1
560
<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粉321676640
P粉321676640

Antworte allen(1)
P粉107991030

只需按照文档进行操作。

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();
        }
    }
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage