Wo sollte die Formularvalidierung in einem MVC-Projekt stattfinden?

8

Ich benutze Kohana, aber ich denke, dass diese Frage allgemeiner ist.

Ich habe die Formularvalidierung im Controller durchgeführt und es hat bisher gut funktioniert. Aber in letzter Zeit bin ich auf ein Problem gestoßen.

Ich habe ein Kommentarmodell, und ich sende Kommentare von ein paar verschiedenen Controllern dazu. Anstatt in jedem Controller einen Validator zu haben, habe ich ihn in das Modell eingefügt.

Das ist großartig, weil

  • Nur eine Stelle zum Ändern / Hinzufügen von Validierungsregeln (DRY)

Das ist scheiße weil

  • Ich muss natürlich einen Erfolg oder einen Fehler an den Controller zurückgeben, und Kohanas Validierungsbibliothek gibt Fehler als Array zurück. So sieht meine Rückkehr so ​​aus

NACH ERFOLG

%Vor%

Bei fehlgeschlagen

%Vor%

Ich kann nicht anders, als zu denken, dass das falsch ist. Es fühlt sich falsch an.

Wenn ich es in der Steuerung mache, kann ich einfach

machen %Vor%

Was mir besser scheint.

Gibt es einen besseren Weg, dies zu tun? Sollte ich im Controller oder in der Methode validieren? Werde ich verrückt?

    
alex 08.10.2009, 02:44
quelle

6 Antworten

4

Ich sehe ehrlich gesagt nichts falsch mit Ihrer Methode, Alex. Es scheint als würdest du es richtig machen. Du folgst dem DRY-Prinzip, das für mich normalerweise der Maßstab ist, um zu messen, ob ich etwas richtig mache, wenn es um MVC geht.

    
Steven Mercatante 08.10.2009, 03:00
quelle
6

Ich glaube nicht, dass alle Validierungsregeln in das Modell aufgenommen werden können. Bei der Validierung dreht sich alles um die Form (oder die API). Tatsache ist, dass bei der Validierung Ihrer Daten die meisten Dinge vom Kontext abhängen.

Beispiel: Ist dies ein eingeloggter Benutzer, der die Aktion ausführt? Sie würden Ihre Authentifizierungsschicht nicht mit dem zu validierenden Modell verknüpfen. Also müssen alle Prüfungen in den Controller gehen. Das Modell ist kontextunabhängig; Die Form "gehört" zum Controller und ist kontextsensitiv.

Ich denke, dass per-form Validierungsregeln plus grundlegende In-Model-Prüfungen für wohlgeformte Daten der richtige Weg sind. Wenn Sie Auth :: instance () oder Session :: instance () in der Funktion validate () Ihres Modells aufrufen, dann machen Sie es falsch.

    
gpilotino 24.10.2009 13:31
quelle
2

Fette Modelle. Kleine Controller. So habe ich es immer gemacht. Validierung für mich ist auf der Datenschicht. Die Datenschicht (zumindest für mich) ist das Modell. Normalerweise benutze ich CakePHP als mein MVC-Framework ... Vielleicht liegt meine Validierung deshalb am Modell. Es ist CakePHP's Art.

    
cp3 08.10.2009 03:50
quelle
0

Ich bevorzuge es, mich nicht über Gefühle zu wiederholen, mach die Methode. Außerdem ist das Array nützlich, da Sie die Fehler aus dem Array in einer Ansicht anzeigen können, wenn Sie möchten. Ich habe kohana nicht verwendet, aber die Validierungsmethode, die ich in ASP.NET MVC verwendet habe, liefert mir eine ähnliche Liste und ich kann dem Benutzer dann zeigen, was genau falsch ist.

    
Anthony Potts 08.10.2009 02:58
quelle
0

Sie sollten immer (wenn Sie können) auf dem Client (JS) validieren. Und da dies umgangen werden kann - validieren Sie auch auf dem Server. Und ja - Ihre Validierung in eine wiederverwendbare Form zu bringen ist eine großartige Idee

    
Bostone 08.10.2009 03:22
quelle
0

Ich mache auch eine Validierung im Modell. Die meisten Modeling-Bibliotheken wie ORM, Auto_Modeler usw. unterstützen auch die Validierung. BTW es ist schneller, wenn Sie auf dem #kohana Kanal auf FreeNode (irc.freenode.net) fragen. Wir (normalerweise) beißen nicht:)

    
user192083 18.10.2009 18:10
quelle