Ich versuche im Grunde, ein mehrstufiges Formular mit der CActiveForm-Klasse in Yii zu erstellen. Die Idee ist, dass ich die eingebaute Funktionalität verwenden möchte, um dies auf die einfachste Weise zu erreichen. Die Anforderung, die ich habe, ist wie folgt:
validateOnChange()
und validateOnSubmit()
Dies ist eine halb funktionierende Lösung, die ich bisher entwickelt habe:
Anzeigen:
%Vor%JavaScript:
%Vor%Controller:
%Vor%Zusammenfassend. Grundsätzlich habe ich ein Formular mit 3 Sendeschaltflächen (eines für jeden Schritt). In meinem Controller überprüfe ich, welche Submit-Taste gedrückt wurde und führe AJAX-Validierung für die spezifischen Attribute für diesen Schritt durch.
Ich verwende eine benutzerdefinierte Funktion afterValidate()
, um die Schritte beim Senden anzuzeigen / auszublenden. In Schritt 3 wird die Standardformularübergabe ausgelöst, die alle Formularattribute an den Controller sendet.
Das funktioniert gut, außer dass es nicht mit validateOnChange()
funktioniert (da der Submit Button nicht gepostet wird). Ich habe mich auch gefragt, ob das der beste Weg ist, dies zu tun oder ob jemand einen besseren Weg kennt?
Danke.
Ich würde vorschlagen, Szenarien zu verwenden, um die entsprechenden Regeln ein- und auszuschalten. Passen Sie das Modellszenario basierend darauf an, was an Ihren Controller gesendet wird.
Hinweis: Dies kann auch ein wirklich guter Ort sein, um ein CFormModel anstelle von CActiveRecord zu verwenden, je nachdem, was in Ihrem Formular ist.
Bearbeiten: können Sie jedem div-Abschnitt ein verstecktes Feld hinzufügen, das die Informationen darüber enthält, in welchem Schritt Sie sich gerade befinden? Scheint so, als ob das statt Ihrer Submit-Buttons funktionieren sollte.
OPTION 1 Wenn Sie keine Schaltfläche erhalten, warum validieren Sie nicht das gesamte Formular. Warum müssen Sie nur bestimmte Attribute validieren? Yii wird das gesamte Modell validieren, alle Fehler zurücksenden, aber nur dieser bestimmte Fehler wird vom aktiven Formular angezeigt, weil es so bereits funktioniert.
OPTION 2 Sie können 3 Formen haben (nicht 1, wie Sie jetzt haben), 1 auf jedem Schritt. Erstellen Sie außerdem für jeden Schritt 3 Szenarien 1.
Jedes Formular hat ein verstecktes Feld, das mit dem Formular gepostet wird, es kann tatsächlich der Szenariorname sein, validieren Sie es einfach, wenn es hereinkommt. Validieren Sie das Modell mit diesem versteckten Feld, um das Szenario festzulegen, in dem Sie sich befinden.
Sie können Teile im Modell cachen, wenn das Formular erfolgreich übergeben wurde und am Ende haben Sie das vollständige Modell.
Ich denke, besser für jeden Schritt der Validierung spezifische Klasse erstellen und Szenarien mit Regeln verwenden. Unten ist ein kleines Beispiel.
%Vor%Erstellen Sie weitere Klassen (Schritte) für die Validierung ...
%Vor%So verwenden Sie im Controller:
%Vor%Oder wir können alle Schritte in einem Validator validieren.
Tags und Links yii