2009-09-19T17:27:26
pktmDennoch sei nach wie vor angemerkt, dass es wenig Sinn macht, Daten in eine Session zu schreiben, um einen Eingabefehler auszugeben, da die Daten vom Nutzer ja bereits da sind.
Nein, das stimmt so nicht ganz. Es kommt drauf an wie du entwickelst.
Ich selber mache z.B. keine Webseiten die ein Formular anzeigt, und gleichzeitig auf die gleiche URL ein "POST" macht.
Daher "/user/create" wäre z.B. die URL zum anzeigen des Formulars und "/user/do_create" wäre z.B. wohin die daten gepostet werden. Wird der Benutzer richtig angelegt, dann gibt es einen redirect entweder auf das erstellte, z.b. "/user/123/show" oder direkt auf eine liste mit allen usern "/user/list" etc.
Sind Daten invalide dann musst du in diesem fall letztendlich wieder redirecten auf "/user/create" um das formular anzeigen zu können. Und zwischen einem Redirect bleiben Daten nunmal nicht erhalten und du musst diese eben temporär abspeichern eben in der Session.
Ansonsten Speziell für Catalyst gibt es da den sogenannten "flash", den man dafür nutzen sollte. Man packt also etwas in den flash. Und diese werden zwar in der Session gespeichert, beim auslesen aus dem Flash werden diese Daten aber automatisch in der Session gelöscht. Was ebenfalls zu empfehlen ist, ist in catalyst dann den "flash_to_stash" zu aktivieren. Daher Daten die man im flash speichert werden genau für 1 request in der session gespeichert. Und beim nächsten Request werden alle Daten aus dem Flash automatisch in catalysts "stash" eingetragen und aus der Session wieder gelöscht. Daher du kannst in einem Step etwas im flash speichern und redirecten, und dort wo du redirected hast erscheinen sie im stash bzw. sind damit im Template automatisch verfügbar. Die Speicherung funktioniert also transparent über einen einzelnen request hinweg, ohne das die daten in der session enthalten bleiben.
Dieser Weg macht man ganz einfach deswegen damit du immer und zu jedem zeitpunkt in deinem browser korrekt vor/zurück nutzen kannst. ohne das jemals Firefox die Frage stellt wie "Dies war ein POST Request, Daten nochmal senden?"
Beim IE ist es nochmal schlimmer der sagt dir dann einfach das die Seite "ausgelaufen" ist und das war es.
Weiterhin hat man durch dieses vorgehen immer gültige URLs die auf das zeigen was man sieht, ohne das auf einmal ungewollt irgendwas erstellt wird wenn man z.B. "F5" drückt oder ein Bookmark auf einmal nicht mehr funktioniert.
Das mit dem erstellen und F5 konnte man z.B. vor einiger Zeit hier in diesem Forum sehen, woran du dich vielleicht noch erinnern kannst. Wenn man nämlich einen Thread erstellt hatte hatte man ohne die URL zu wechseln, sprich ohne redirect, auf den erstellten Thread gewechselt. Führte dann dazu wenn man F5 gedrückt hatte, man die Abfrage bekam ob man Daten nochmal senden möchte, und wenn man "ja" ausgewählt hatte man den Thread dann zweimal erstellt hatte. Hättest du dir die seite gebookmarkt und hättest du später den Bookmark aufgerufen dann wärst du auf einmal auf die "Thread erstellen" Seite gelandet, anstatt auf deinen Thread.
Es ist also nur eine Frage wie korrekt du es haben möchtest, und was du in kauf nimmst. Da ich auf Vor/Zurück wert lege ohne das auf einmal irgendwelche neuen Dinge erzeugt werden, oder es im IE gar nicht geht, muss ich dazwischen redirecten, und demzufolge eingabedaten auch in der Session abspeichern, da kommt man letztendlich dann nicht mehr drum herum.
Insgesamt ist das für die Programmierung auch sauberer da ich aus eigener Erfahrung sagen kann das man dadurch bessere für sich allein stehende Funktionen entwickelt, ohne das diese auf einmal zu viel Logik machen oder manche Funktionen doppelte Logik enthalten etc.
Last edited: 2009-09-19 19:56:43 +0200 (CEST)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de