Der beste Platz für die Validierung im Modell / Ansicht / Controller-Modell?
Arbeite ich an einem PHP-Projekt, das ermöglicht die umfangreiche Nutzung des MVC-Entwurfsmusters. Ich bin auf der Suche hinzufügen von Validierung zu einem Formular, und bin neugierig, was der richtige Ort für Validierung ist.
Aufgrund der Art und Weise, die Formen erzeugt werden, die Validierung auf die postback-Daten ist viel einfacher und weniger repetitive im view-Komponenten. Ist es akzeptabel, die der Ansicht Validierung von Antwortdaten, oder sollte dies umgesetzt werden, die innerhalb der controller-oder sogar das Modell?
Was sind die Vorteile?
InformationsquelleAutor der Frage Lea Hayes | 2011-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die Validierung der Daten auf der client-Seite (ich.e Javascript-Validierung), die ist absolut nicht ausreichend und nicht sicher sind, sollten Sie implementieren es in Sicht.
Wenn Sie die überprüfung von Daten auf der server-Seite, Und Ihre Validierung erfordert nicht die Geschäftslogik der Anwendung (ich.e, du bist nicht zu überprüfen, ob der Benutzer genügend Guthaben auf seinem Konto), sollten Sie überprüfen, in der controller.
Wenn die Validierung erfordert business-Logik Implementieren, die es im inneren des Modells, und rufen Sie es über den controller.
Postback-Validierung ist nicht gut, da Sie legt viel Druck und bei Verzug, und der einzige Vorteil ist, der Programmierer (nicht berücksichtigt werden).
Können Sie regex für die meisten der Validierung, Die hat die gleiche syntax (fast) auf PHP-und JS.
InformationsquelleAutor der Antwort AbiusX
Den richtigen Ort für die Validierung ist die Modell.
Dieser macht am meisten Sinn, weil du tust, überprüfung der Daten, die ist, was das Modell darstellt. In Bezug auf die CRUD-updates, das Modell sollte immer verwendet werden, irgendwie.
Wenn Sie das ändern von Daten aus der
anzeigen, Sie sollten Validierungen
geprüft wird.
Wenn man Controller ändern
Daten, die Sie haben sollten Validierungen
geprüft wird.
Und schließlich, wenn Sie mit der
Modell selbst ändern von Daten, Sie
sollten noch Validierungen.
Der einzige Weg, diesen Zustand zu erreichen, ist die Validierung gehen in das Modell ein.
Durch Leistung und schnellere Reaktion, nach der Umsetzung der Validierungen im Modell, sollten Sie versuchen, fügen Sie etwas Art von client-Seite(JS) unverzüglich an den Endverbraucher.
Validierung ist immer über die Daten. Warum sind Sie die Validierung der Daten? So kannst du die Integrität der Daten, Ihre Speicherung. Nachdem die überprüfungen auf der Modell-Ebene können Daten theoretisch immer korrekt. Dies ist immer ein neccesity. Von dort können Sie hinzufügen, zusätzliche Validierungen in Ihre business-Logik und client-Seite, um Ihre Anwendung noch benutzerfreundlicher.
InformationsquelleAutor der Antwort Mike Lewis
Validierung in das Modell zu sein scheint, die allgemeinste Ansatz (Sie am Ende mit etwas wie
$obj->isValid()
) und dieser eignet sich in vielen Situationen.Jedoch je nach Anwendungsfall kann es gute Gründe geben, um die Validierung außerhalb des Modells, entweder über separate Validierungs-code oder in die Steuerung, etc.:
true
oderfalse
könnte alles, was notwendig ist.Kann es möglich sein, mit diesen unterschiedlichen Anwendungsfällen über Argumente für das Modell der
isValid()
Methode, aber dies wird zunehmend unhandlich, da die Anzahl der Validierung styles erhöht. (Und ich denke es ist fast garantiert, dass eine einzige "one-size-fits-all" -isValid()
Methode wird schließlich als unzureichend erweisen, für die meisten nicht-trivialen Projekte.)InformationsquelleAutor der Antwort mjs
Nicht bekommen zu verwechseln mit Desinfektion oder Reinigung der gesendete Wert mit der Validierung. Sie Holen sollten, werden die gebuchten Werte und schrubben Sie entfernen Sie alle schädlichen Elemente aus der Werte in der Controller. Dann senden Sie die Daten an das Modell validiert werden, die für die erwarteten Werte oder format. Durch das brechen dieser Handlungen in zwei Verfahren reduzieren das Risiko von bösartigem code umgesetzt. Diese Methode funktioniert gut, wenn du mit "trust no one input" - Politik; wissen, einige Programmierer schlampig oder faul. Eine weitere positive Seite ist, verhindert, dass Ihre Modell immer aufgeblähter und immer gearbeitet, wenn ja, dann verwenden Sie ein Modell Helfer, die Drecksarbeit zu machen. Dieser Ansatz wird auch helfen, balance Ihr laden von Anwendungen und verbessert die Leistung.
InformationsquelleAutor der Antwort Carl Barrett