2010-11-26 5 views
7

Ich bin ziemlich neu in Codeigniter und ich frage mich einige Codeigniter Best Practices. Wenn ich redirect() verwenden sollten

$this->load->view 

im Vergleich mit Es scheint, dass, wenn ich redirect() verwenden dann $this->session->set_flashdata funktioniert, wie es sollte, aber wenn ich

$this->load->view 

die Nachricht nach einer zusätzlichen Anforderung angezeigt wird, verwenden.

+1

Natürlich 'flashdata' nicht auf der aktuellen' $ this-> last-> Ansicht() funktioniert, ', da es einen Sitzungswert festlegt, der nur auf der nächsten Seite angezeigt wird, die vom Browser geladen wird (nicht die aktuelle Seite). Wenn Sie Daten an 'view()' übergeben wollen, übergeben Sie sie einfach an den 'view ($ page, $ data)' Aufruf selbst als zweiten Parameter. –

+0

Ich bin mir nicht sicher, was Sie versuchen zu tun. Sie müssen wahrscheinlich etwas mehr Zeit damit verbringen, die CI-Dokumente zu lesen. Es klingt, als würden Sie die Dinge ein bisschen vermischen ... – Ben

+0

http://StackOverflow.com/a/32866456/412591 –

Antwort

6

Ich denke, Sie haben wirklich Ihre eigene Frage beantwortet.

Verwenden Sie redirect(), wenn eine einfache Flash-Nachricht am oberen Rand einer anderen Seite eine geeignete Antwort ist, verwenden Sie $ this-> load-> view(), wenn Sie eine ganze Seite im Wert von Feedback für den eingehenden liefern Anfrage kann sein.

Wenn sich beispielsweise ein neuer Benutzer anmeldet, ist die "Erfolg" -Seite eine geladene Ansicht und wenn ein Benutzer etwas in seinem Konto bearbeitet, reicht eine Flash-Nachricht "Änderungen gespeichert" oder ähnliches auf der gleichen Seite aus .

+0

Ich habe Probleme damit, Sie scheinen nur überflüssig zu sein, obwohl '$ this-> load-> view()' in Funktionen wie der Verwendung von Flash-Nachrichten zu fehlen scheint. Sicher könntest du einfach mit 'redirect()' durchkommen? – wired00

4

Redirect ist auch für zwei andere gemeinsame Probleme:

  • Wenn eine Ressource in Sie app bewegt wird (und Sie möchten Kunden die neue URI erinnern)
  • nach der Einlieferung ein Formular als einen Schritt in Verhindern zurück Knopf rePOSTs
1

ist es ziemlich einfach. Auf welche URL soll der Benutzer zugreifen? Wenn sie auf URL1 sind und Daten zurück zu URL1 posten und Sie nur eine andere Ansicht laden, sind sie immer noch auf URL1. Wenn Sie zu URL2 umleiten, werden sie zu URL2 weitergeleitet.

4

Ihre Beobachtung ist richtig, dass, wenn Sie einige flashdata erstellen, es nur die Zeit verfügbar ist. Das liegt daran, dass flashdata nur eine spezielle Art von session ist, die für Ihre nächste Anfrage verfügbar ist und nach der nächsten Anfrage automatisch gelöscht wird. Sie müssen sich nicht um das Löschen kümmern.

$this->session->set_flashdata('test', 'testing'); 
echo $this->session->flashdata('test'); 

nichts gedruckt wird:

Dies kann mit dem Code getestet werden. Aber jetzt das nächste Mal führen Sie den folgenden Code:

echo $this->session->flashdata('test'); 

Sie finden die erforderliche Ausgabe. Wenn Sie es noch einmal ausführen, wird keine Ausgabe ausgegeben. So arbeiten sie. Weitere Einzelheiten den Abschnitt Flashdata in http://codeigniter.com/user_guide/libraries/sessions.html

für die aktuelle Seite überprüfen Sie nicht benötigen flashdata nur die Daten an die Ansicht übergeben. Hier ist der Code:

$data['test'] = 'testing'; 
$this->load->view('sample_view', $data); 

Unterm Strich ist, dass die Verwendung flashdata mit redirect() und Ansichten sollten Sie Variablen übergeben. Hoffe das hilft!

1

Sie müssen PRG - Post/Redirect/Get-Muster verwenden. Redirect und load view sind nicht identisch, wenn Sie das Formular im Inhalt der Seite haben.

Scenario: 

Es gibt eine Ansicht, view_1 mit Formular darin, Geld von einem Konto abzubuchen. Nach dem Absenden des Formulars in der view_1 möchten Sie mit einer Erfolgsmeldung zu view_2 springen und Sie haben 2 Möglichkeiten, um das gleiche zu erreichen. 1. lade view_2 mit Erfolgsmeldung oder 2. redirect to view_2 mit flash-Daten mit Erfolgsmeldung.

Option 1: Last view_2 mit Erfolgsmeldung Wenn Sie das Formular abschicken und aktualisieren, wird es dazu führen, Wiedervorlage und mehrere Abbuchung vom Konto verursachen, was nicht der Fall sein sollte. Sie können auch die Alarmmeldung "Bestätigung der Formularwiederholung" sehen.

Option 2: Das ist die richtige Antwort PRG

PRG - Pfosten-/Redirect/Get PRG ist ein Design-Web-Entwicklung Muster, das einige doppelte Formularen verhindert, was bedeutet, Formular senden (VIEW_1) - > Redirect -> Get (view_2)

Under the hood 

Redirect-Statuscode - HTTP 1.0 mit HTTP 302 oder HTTP 1.1 mit HTTP 303

Eine HTTP-Antwort mit Redirect-Statuscode wird zusätzlich eine URL im Location-Header-Feld bereitstellen. Der Benutzeragent (z. B. ein Webbrowser) wird durch eine Antwort mit diesem Code aufgefordert, eine zweite, ansonsten identische Anfrage an die neue URL zu stellen, die in dem Standortfeld spezifiziert ist.

Der Umleitungsstatuscode soll sicherstellen, dass der Browser des Webbenutzers in diesem Fall die Serverantwort sicher aktualisieren kann, ohne dass die anfängliche HTTP POST-Anforderung erneut übermittelt werden muss.

Source

Double Submit Problem 

Double Submit Problem

Post/Redirect/Get Solution 

Post/Redirect/Get Solution

Verwandte Themen