6 Stimmen

Validierung als Eigenschaft des Formulars

Im CakePHP-Framework sind Validierungsregeln eine Eigenschaft des Modells. Das bedeutet, es spielt keine Rolle, woher die Daten kommen: Wenn Sie sie in einem Modell speichern möchten, müssen sie die Validierung bestehen.

In Symfony geben Sie dagegen die Validierungsregeln pro Formular an. Da es möglicherweise mehr als ein Formular pro Modell gibt (und Formulare Daten aus verschiedenen Modellen enthalten können), kann es sein, dass Daten für ein bestimmtes Modell verschiedene Filter bestehen müssen, je nachdem, aus welchem Formular sie stammen.

Ich verstehe, dass dies gelegentlich nützlich sein kann, und tatsächlich bietet CakePHP Methoden an, um verschiedene Validierungsregeln dynamisch anzugeben, wenn Sie möchten. Aber dies ist die Ausnahme, nicht die Regel. Mir scheint, dass das Entwerfen auf eine andere Weise die Tür für Fehler öffnet, bei denen Sie Ihre Validierungsregeln aktualisieren, aber vergessen, alle Formulare zu überprüfen.

Andererseits bin ich sicher, dass Fabien Potencier klüger ist als ich und wahrscheinlich einige Gedanken in dieses Design gesteckt hat. Also lautet meine Frage:

Was sind die guten Gründe für eine Validierung pro Formular (als Regel, nicht als Ausnahme)?

3voto

Abba Bryant Punkte 4002

Ich würde sagen, dass es sich um 2 verschiedene Dinge handelt.

Model Validierung - validiert, dass die Daten, die in das Modell eingehen, gültig für die Persistenz sind und die Geschäftslogikintegrität aufrechterhalten (gängige CakePHP-Validierung)

Formulardatenfilterung - Überprüft, ob das Formular mit akzeptablen Werten ausgefüllt ist. Offensichtlich gibt es einige Überschneidungen, und oft wird die Formularkontrolle von der Modellvalidierung übernommen. Manchmal jedoch nicht.

Zum Beispiel könnte ein Formular den Zustand eines Kontrollkästchens kennen müssen, um den nächsten Abschnitt eines Wizards zu bestimmen, der angezeigt werden muss. Dies hat nichts mit dem Modell zu tun, ist aber eine gültige Validierungsanforderung. (Kontrollkästchen oder Optionsfeld hat einen Wert in einer Menge von legalen Werten)

Natürlich können Sie mit CakePHP problemlos ein Komponenten-/Verhaltens-Kombo schreiben, das beide Szenarien mit benannten Indizes im Validierungsarray behandelt. Es ist leicht genug, einen Schlüssel 'default' festzulegen, der immer verwendet wird, und einen Schlüssel für jede 'Aktion', der zusätzliche Validierungslogik bestimmt.

Es gibt sogar ein paar vorgefertigte Lösungen, wenn Sie ein wenig googeln.

2voto

Maerlyn Punkte 32964

Du hast die Vererbung vergessen. Hier ist, was ich meine:

  • Grundlegende Validierungsregeln stammen aus Ihrem Datenbankschema, Dinge wie Zeichenlänge, Feldtyp usw. - diese werden in die BaseModelForm-Klasse übernommen
  • Sie können diese in Unterklassen leicht überschreiben, wie z.B. ModelForm (und es wird empfohlen, da Basisklassen automatisch generiert werden und Sie Ihre Änderungen beim nächsten Regenerieren verlieren)
  • Sie können diese wieder unterklassifizieren, wenn Sie einige Validierer (oder Widgets) ändern müssen.

Manchmal habe ich unterschiedliche Validierungsregeln pro Formular, wie z.B. eins für das Backend, eins für das Frontend - auch wenn sie sich mit demselben Modell befassen. Grundregeln stammen aus der automatisch generierten Klasse, und ich ändere ein paar Widgets und Validierer oder entferne einige.

1voto

circusdei Punkte 1927

Gute Gründe, soweit ich weiß: 1. Wenige Formulare. 2. Formulare mit stark unterschiedlicher Funktionalität. 3. E-Mails müssen möglicherweise unterschiedliche Validierungen durchlaufen (Login-E-Mails müssen z. B. eine URL von email@thisSite.com haben, während Registrierungs-E-Mails von beliebigen Domänen stammen können).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X