2017-09-16 3 views
0

Irgendwie zu sehen, ich schaffte es nur, um es arbeitet (Weitergabe von Daten, Arrays von Controller anzuzeigen)Laravel Gabe von Daten von Controller-Sitzungen

return redirect('whatever')->with('arrayName', $arrayName); 

in der Ansicht verwenden, darauf zuzugreifen über

@if(!is_null(session('arrayName'))) 
     <div class="alert alert-{{ session('arrayName')['something'] }} alert-dismissable"> 
     // more code goes here   
    @endif 

Jetzt scheint dies eine Sitzung zu sein, und ich verwende diese Technik, um Daten in Form von Informationen (wie erfolgreich erstellt XY, gelöscht, ... und so weiter) (mit der gleichen Der Name des Nachrichten-Arrays), hin und wieder kommt es vor, dass Informationen auf Seiten angezeigt werden, wo Es sollte nicht sein (da der obige HTML-Code in jeder HTML/Blade-Seite enthalten ist, um immer die Möglichkeit zu haben, Meldungen/Warnungen anzuzeigen), weil er immer noch in der Sitzung gespeichert ist. Es wird also nicht nur eine alte Nachricht angezeigt, sondern auch eine Nachricht, die ich an einem ganz anderen Punkt in meiner Anwendung verwendet habe.

Ich frage mich, ob entweder der session() Aufruf der Fehler ist oder ich die Sitzung leeren muss (wenn ja, wie und wann?) Oder wenn ich gerade etwas über die Kommunikation zwischen Controller und Ansicht vermasselt habe, seit ich gesehen habe (ebenfalls here), dass Leute den einzigen Variablennamen verwenden, wenn sie innerhalb der Ansicht auf sie zugreifen, und nicht auf session(). Also, hängt das vielleicht mit einer alten Laravel-Version zusammen (ich benutze die neueste Version), als es damals noch funktionierte oder etwas, das ich vermisse?

Vielen Dank für Ihre Vorschläge.

+0

Warum verwenden Sie nicht $ request-> session() -> flash ('arrayName', 'Task war erfolgreich!'); ... – Serge

+0

@Serge wie spielt das entlang der Funktion '' redirect() -> mit() 'ich früher? Bitte erläutern Sie dies. – John

Antwort

0

Ich vermute, dass die Daten, mit denen Sie Probleme haben, Daten sind, die Sie manuell in der Sitzung mit session()->put('key', 'value) oder session(['key' => 'value']) gespeichert haben. Wenn Sie Daten in die Sitzung put() eingeben, bleibt es dort, bis die Sitzung abläuft oder manuell vergessen wird.

Wenn Sie jedoch möchten, dass die Daten nur für eine Antwort bleiben und sich danach sofort löschen, können Sie die Methode flash() verwenden. So funktioniert die redirect()->with() Funktionalität. Die Daten, die Sie in with() angeben, werden in die Sitzung "geflasht", so dass sie nur für eine Antwort ausreicht.

So können Sie entweder Ihren Code ändern zu „Flash“ Daten an die Sitzung, wenn es nur für eine Antwort benötigt wird, oder Sie werden Ihre Blade-Vorlage aktualisieren müssen manuell forget() die Daten, nachdem Sie es an:

@if(!is_null(session('arrayName'))) 
    <div class="alert alert-{{ session('arrayName')['something'] }} alert-dismissable"> 

    // more code goes here 

    @php 
     session()->forget('arrayName') 
    @endphp 
@endif 
+0

Vielen Dank für Ihre Antwort. Ich habe nicht, wie ich in der Post gesagt habe, 'session() -> put ', sondern nur' redirect() -> with() 'verwendet und deshalb habe ich mich so sehr gefragt. Irgendein anderer Punkt, es sagte nur "XY erfolgreich hinzugefügt" (während es dort nicht hingehörte) als eine Nachricht. – John

Verwandte Themen