2016-05-19 6 views
0

Was sind die besten Praktiken, wenn es darum geht, Validierungsbeschränkungen in Ihre Projekte zu integrieren?Validierung in Symfony2: Entität vs FormType - Best Practices?

In den meisten Fällen behalten Sie es in Entitäten oder FormTypes?

Was sind die Vor- und Nachteile?

Hier ist, was ich meine:

Formtype Beispiel

$builder 
    ->add('firstName', TextType::class, array(
     'constraints' => array(
      new NotBlank(), 
     ), 
    )) 
; 

Entity Beispiel

class Author 
{ 
    /** 
    * @Assert\NotBlank() 
    */ 
    protected $firstName; 
} 

Antwort

4

Meine Antwort ist: beide.

Manchmal haben Sie Beschränkungen, die für Ihre Entitäten anwendungsweit gelten. Manchmal werden Beschränkungen jedoch nur in Ihrem Formularkontext angewendet. In diesem Fall können Sie Constraints direkt in Ihrem Formular verwenden oder Sie können validation_groups verwenden.

Ich neige dazu, Entity Constraints am meisten zu verwenden, weil ich es sauberer finde und keine Inkonsistenz in meiner Anwendung einführt.

+2

Die beste Lösung besteht immer noch nicht darin, Entitäten als Datenobjekte zu verwenden. Schreiben Sie Datenübertragungsobjekte, um eine Menge Kopfschmerzen zu vermeiden und Formulare viel einfacher zu machen. In diesem Fall kann ich sagen, dass Ihre Antwort in der Tat richtig ist. –

+0

Irgendein Ausschnitt? Ich bin gespannt, wie du das richtig machst. – Terenoth

+1

Es ist einfach ein Datenobjekt mit Getter/Setter (POPO), wie meine ChangeUsernameType hat eine ChangeUsernameData, es enthält einfach den alten und neuen Benutzernamen, mein Typ hat einen wiederholten Typ auf dem neuen und entspricht dem alten gegen einen bestehenden Benutzernamen. Einmal übergeben und gültig, mache ich einfach $ user-> setUsername ($ myDto-> getUsername()); und ich spüle meinen Benutzer. Dies verhindert, dass meine Entitäten in einen ungültigen Zustand gelangen und sogar noch schlimmer, wenn sie in diesem Zustand aus Versehen gespült werden. Es bedeutet auch, dass ich meine Formen formen kann, ohne von meinem Modell restringiert zu werden. –