Ich habe einige Lithium-Tutorials gemacht (Links unten, falls sie jemand anderem helfen, und auch um zu zeigen, dass ich meine Hausaufgaben gemacht habe :) und ich verstehe die grundlegendsten Teile beim Erstellen von Modellen, Ansichten, Controllern und Verwenden MVC zum Erstellen eines DB-Datensatzes basierend auf Formulareingabe.
Ich bin jedoch neu bei MVC für Webapps und Lithium, und ich bin mir nicht sicher, wie ich meinen Code in komplizierteren Situationen schreiben sollte. Dies ist eine allgemeine Frage, aber zwei spezifische Validierungsfragen, die ich habe, sind:
Ich wäre sehr dankbar für jede Hilfe bei diesen Fragen, und konkrete Beispiele wie diese werden mir auch wirklich helfen, zu verstehen, wie man gute MVC-Kodierung auch in anderen Situationen macht!
Aus Gründen der UI fordert das Anmeldeformular die Benutzer auf, ihr DOB in drei Felder einzugeben:
%Vor%Was ist der beste Weg, um diese Server-Seite zu validieren? Ich denke, ich sollte die automagische Validierung nutzen, aber ich bin mir nicht sicher, wie das am besten für eine Reihe von Variablen funktioniert, die nicht wirklich Teil des Modells sind. Zum Beispiel:
$this->request->data
in UsersController
nachbearbeiten? Z.B. Modifizieren Sie $this->request->data
in UsersController
, bevor Sie sie an Users::create
übergeben. $this->request->data
herausziehen und einen statischen Aufruf von Validator::isDate
in UsersController
? Users::create
überschreiben und die zusätzliche Validierung und Nachbearbeitung dort durchführen? All diese Dinge scheinen so zu sein, als könnten sie funktionieren, obwohl einige ein bisschen hässlich wirken und ich nicht weiß, welche für mich in Zukunft größere Probleme verursachen könnten.
[BEARBEITEN: In engem Zusammenhang damit steht das Problem, die drei Formularfelder zu einem einzigen Feld zu kombinieren, das im Modell gespeichert werden soll]
Für den gesunden Menschenverstand / die gängige Praxis fordert das Anmeldeformular die Benutzer auf, ihre E-Mail-Adresse zweimal anzugeben:
%Vor%Wie kann ich eine Automagic-Validierungsregel schreiben, die diese beiden Formularfelder auf den gleichen Wert prüft, aber nur die E-Mail-Adresse in der Datenbank speichert?
Es fühlt sich an, als wäre es die gleiche Frage wie die obige, weil die Liste der möglichen Antworten, die ich mir vorstellen kann, die gleiche ist - also schicke ich das als eine Frage ein, aber ich würde Ihre Hilfe sehr schätzen beide Teile, da ich denke, dass die Lösung für dieses hier subtil und anders und gleichermaßen erleuchtend sein wird!
[BEARBEITEN: Eng damit verbunden ist das Problem, verify_email_address nicht in meinem Modell und DB zu speichern]
Ich habe andere gelesen, aber diese drei Tutorials haben mich dahin gebracht, wo ich mit Benutzern bin und Formulare jetzt anmelde ...
Einige andere StackOverflow-Fragen zu eng verwandten Themen (aber nicht beantwortet und auch nicht Lithium-spezifisch)
NB: CakePHP-artige Antworten sind auch in Ordnung. Ich weiß es nicht, aber es ist ähnlich und ich bin mir sicher, dass ich es übersetzen kann, wenn ich es brauche!
Ich würde empfehlen, dies in Model
anstatt in Controller
zu tun - so geschieht es, egal wo Sie speichern.
Bei dem Problem mit dem Datumsfeld überschreiben Sie in Ihrem Modell die save()
-Methode und behandeln die Konvertierung der mehreren Felder in den Daten in ein Datumsfeld, bevor Sie parent::save
aufrufen, um die eigentliche Speicherung durchzuführen. Irgendeine fortgeschrittene Manipulation kann dort passieren.
Die in Ihrem Kommentar beschriebene Technik, ein verstecktes Formularfeld zu verwenden, um Fehlermeldungen zur Anzeige zu bekommen, klingt ziemlich gut.
Um zu vergleichen, dass zwei E-Mail-Felder gleich sind, würde ich empfehlen, einen benutzerdefinierten Validator zu definieren. Sie können dies in Ihrem Bootstrap mit Validator :: add tun.
%Vor%Dann in Ihrem Modell:
%Vor%Bearbeiten : In den Kommentaren finden Sie eine Möglichkeit, die Überprüfung von benutzerdefinierten Regeln in einem Controller durchzuführen:
%Vor%Ein Vorteil des Festlegens der Daten für die Entität besteht darin, dass sie automatisch in Ihrem Formular vorbefüllt wird, wenn ein Validierungsfehler auftritt.
Tags und Links php model-view-controller validation cakephp lithium