2016-05-05 13 views
6

In meinem aktuellen ZF2-Projekt habe ich einen komplexen Form mit mehreren Ebenen von verschachtelten Fieldset s, die die Struktur von Objekten widerspiegeln, die im Hintergrund gespeichert werden sollen. Derzeit werden die Daten direkt an die Controller gesendet und in der Datenbank gespeichert, wenn sie gültig ist.Wie implementiert man eine Formularvorschau in Zend Framework 2?

Jetzt sollte ein Zwischenschritt implementiert werden: Der Benutzer sollte die Eingabedaten überprüfen können, bevor er in der Datenbank gespeichert wird. Wenn er entscheidet, dass es korrekt ist, sollten die Formulardaten übermittelt und in der Datenbank gespeichert werden; Wenn der Benutzer entscheidet, dass das Formular bearbeitet werden muss, sollte er in der Lage sein, zum Formular zurückzukehren und es zu korrigieren. (Natürlich alles in einer Schleife, bis der Benutzer mit dem Formular zufrieden ist und es abschickt.)

Das bedeutet, dass eine Vorschau-Seite benötigt wird. Diese Seite/action sollte die Daten bekommen und irgendwie anzeigen (als Tabelle oder wie auch immer). Die Daten müssen irgendwo zwischengespeichert werden und bereit sein, auf das Form Objekt "hydratisiert" zu werden und gespeichert zu werden. Wenn der Benutzer das Formular aktualisieren möchte, sollte das Formular wiederhergestellt werden.

Wie kann ich diese Anforderung implementieren?

UPDATE

Ich suche eine serverseitige Lösung. Die Vorschau sollte eine neue Seite sein und kein JavScript/clientseitig erzeugtes HTML auf derselben Seite (für das Tracking und andere Zwecke).

+0

Können Sie die Objekte nicht serialisieren und in einer Sitzung speichern. Anschließend können Sie die Objekte aufheben, um sie in der Datenbank zu speichern, nachdem der Benutzer seine Daten akzeptiert hat. – Garry

+0

Welches Objekt meinen Sie? 'Form'? Und wo zu speichern - in der Sitzung? – automatix

Antwort

0

Ich würde sagen, dass die beste Lösung wäre, ein Client-seitiges (Java) -Skript zu implementieren, das ausgeführt wird, bevor Sie das Formular POST Anfrage ausführen. Sie können das Formular-Submit-Ereignis abfangen und eine Client-Seitenansicht rendern, in der Sie den aktuellen Status aller Formularfelder (Name und Wert) anzeigen. Wenn der Benutzer auf accept klickt, fahren Sie mit der Operation POST fort. Wenn der Benutzer auf Abbrechen klickt, kehren Sie zur Ansicht des Formulars zurück, wo Sie weitere Änderungen zulassen, und das Ganze wiederholt sich.

Es soll Beispiele nicht schwer zu finden sein, wie dies zu tun ... ist

Ein Beispiel this blog post, aber es gibt viele mehr mit the help of Google zu finden.

+0

Vielen Dank für Ihre Antwort! Nun, theoretisch würde es funktionieren, aber mit diesem Ansatz müsste ich alle serverseitig implementierten Validierungslogiken duplizieren, um sie in JavaScript zu implementieren. – automatix

+0

Sie haben geschrieben: * "Der Benutzer sollte eine Möglichkeit haben, die Eingabedaten zu überprüfen, bevor sie an den Server gesendet werden. Wenn er entscheidet, ist das korrekt, das Formular sollte gesendet und in der Datenbank gespeichert werden" *, und das ist ohne Hinzufügen möglich jede Bestätigung: 1) der Benutzer überprüft seine Eingabe. 2) Wenn der Benutzer denkt, alles ist in Ordnung, können Sie den Server trotzdem seine Arbeit machen lassen und validieren. Wenn Sie jedoch möchten, dass der Server vor dem Benutzer validiert wird, können Sie tatsächlich ähnlichen Code für die Validierung auf dem Client schreiben. Es wäre effizienter, wenn der Server bei jedem Versuch die gesamte Arbeit erledigt.Die HTML5-Validierung kann hilfreich sein. – Wilt

+0

@automatix [Es gibt einige Module für ZF2] (https://www.google.se/search?q=zf2%20client%20side%20validation), die Ihnen bei der Integration der clientseitigen Validierung in Ihr Projekt helfen können. Ich habe keine Erfahrung aus erster Hand, aber es könnte einen Versuch wert sein. – Wilt

0

Da ich nicht weiß, wie Ihre Anwendung/db strukturiert ist, kann ich nur spekulieren, dass Sie eine andere Tabelle erstellen könnten, die temporäre Daten speichern würde oder nachdem der Benutzer das Formular übergibt und validiert, anstatt es in db make zu speichern Alle Felder sind schreibgeschützt und ersetzen die ursprüngliche Übergabeschaltfläche durch diejenige, die die Daten speichert, und die, die den Benutzer zurück zum Formular bringt, wo er/sie die Daten ändern kann.