2016-04-27 5 views
1

Ich habe ein Problem. In der Entität habe ich Validierung festgelegt. Ich habe dort Begriff Feld, das benötigt wird (NotBlank constraint). Es funktioniert gut, aber wenn jemand das Objekt bearbeitet, möchte ich die Validierung für dieses Feld deaktivieren; dann ist es nicht erforderlich, weil jemand diese Datei bereits hochgeladen hat. Natürlich habe ich nur eine Form, eine Ansicht und zwei Aktionen im Controller. Wie kann ich mit einer solchen Situation umgehen?Symfony3 Validierungsfeld nur beim Hinzufügen von Objekt

Dank

Antwort

0

Sie können hierfür eine Callback verwenden.

Da die Validierung vor Spülung erfolgt, wird Ihr Unternehmen kein id haben, fügen Sie eine Einschränkung, die wie folgt aussieht:

class YourEntity 
{ 
    // ... 
    private $term; 

    /** 
    * @Assert\Callback 
    */ 
    public function validate(ExecutionContextInterface $context) 
    { 
     if (!$this->getId() && !$this->getTerm()) { 
      $context->buildViolation('This field is required!') 
       ->atPath('term') 
       ->addViolation(); 
     } 
    } 
} 
+0

Das ist ok, aber zuerst möchte ich eine Lösung mit Validierung in Annotationen finden. – r3m4k3

+0

Ok, ich habe das analysiert. Diese Lösung ist für mich in dieser konkreten Situation viel besser. Vielen Dank! :) – r3m4k3

+0

Kein Problem! Wenn Sie eine Annotation verwenden möchten, können Sie versuchen, mit 'Assert \ Expression()' eine Regel zu erstellen. Ich bin sicher, es ist möglich, aber diese Lösung wird auch funktionieren. –

0

Sie dieses Verhalten durch die Validierung Gruppen erreichen können:

Die Definition wäre:

/** 
* @Assert\NotBlank(groups={"creation"}) 
*/ 
private $terms; 

Und für die Validierung Sie tun:

wenn Erstellen und

$errors = $validator->validate($someVar, null, array('edit')); 

beim Bearbeiten.

+0

ich über Gruppen zu lesen, aber ich möchte nur die Validierung für diese nur ändern ein Feld und nur beim Bearbeiten. In dieser Lösung muss ich 2 Gruppen machen. Gibt es noch eine andere Lösung, um es auf eine andere Weise funktionieren zu lassen? BTW, wo soll ich das setzen: $ errors = $ validator-> validate ($ author, null, array ('registration')); ? – r3m4k3