Session-Daten bleiben nicht erhalten nach einer Umleitung
Ich versuche zu implementieren, einige benutzerdefinierte flash-Mitteilungen und ich habe einige Probleme mit den session-Daten zerstört werden, nachdem eine Umleitung.
Hier, wie ich meine flash-Mitteilungen :
flash('Your topic has been created.');
Hier ist die Erklärung der flash()
Funktion :
function flash($message, $title = 'Info', $type = 'info')
{
session()->flash('flash', [
'message' => $message,
'title' => $title,
'type' => $type,
]);
}
Und hier ist, wie ich überprüfe die Sitzung/das anzeigen der flash-Nachrichten, mit SweetAlerts. Dieser code ist auf der Unterseite des Haupt-layout-Datei, der ich bin, der sich in all meine Klinge Vorlagen.
@if(Session::has('flash'))
<script>
$(function(){
swal({
title: '{{ Session::get("flash.title") }}',
text : '{{ Session::get("flash.message") }}',
type : '{{ Session::get("flash.type") }}',
timer: 1500,
showConfirmButton: false,
})
});
</script>
@endif
Der obige code funktioniert, wenn ich den Anruf flash()
Funktion vor dem anzeigen einer Ansicht, etwa so :
public function show($slug)
{
flash('It works!');
return view('welcome');
}
Jedoch, es wird nicht funktionieren, wenn ich es nennen, bevor Sie eine Umleitung zu einer anderen Seite, etwa so :
public function show($slug)
{
flash('It does not work');
return redirect('/');
}
Warum ist die session-Daten verloren umleiten? Wie kann ich es weiterhin so, dass ich meine flash-SMS?
- Könnten Sie bitte überprüfen Sie urls vor und nach der Umleitung? Manchmal sind Sie auf Domäne mit
www.
und redirect auf domain ohnewww.
- und in diesem Fall werden Sie nicht sehen, Sitzung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich heraus, dass es notwendig ist, gelten die web-middleware auf allen Strecken. Ertrinken erwähnt hat, so zu tun, aber seit März 23st 2016, Taylor Otwell die Standardeinstellung geändert RouteServiceProvider bei https://github.com/laravel/laravel/commit/5c30c98db96459b4cc878d085490e4677b0b67ed
Durch das ändern der web-middleware automatisch angewendet wird, um alle Routen. Wenn du nun gilt es wieder in Ihre routes.php Sie werden sehen, dass
web
erscheint zweimal auf der route-Liste (php artisan route:list
). Genau dies macht die flash-Daten verwerfen.Siehe auch: https://laracasts.com/discuss/channels/laravel/session-flash-message-not-working-after-redirect-route/replies/159117
Es stellt sich heraus, dass mit Laravel 5.2, die Strecken sind, eingewickelt werden, in die web-middleware für die Sitzung, um richtig zu arbeiten.
Diese behoben es :
Mit Laravel 5.2.34, alle Routen sind mit web-middleware standardmäßig.
Daher, dieses zu ändern:
Zu diesem:
Und dann in Ihrem controller, den Sie verwenden könnten:
Redirect mit flash-Daten wird wie folgt vorgenommen:
In frühen Laravel 5.2 Versionen, die alle Ihre
Flash
undSession
Daten werden nur dann gespeichert, wenn Sie Ihre Routen sind innerhalbweb middleware
Gruppe.Als der Laravel 5.2.34, alle Routen sind mit web-middleware standardmäßig. Wenn Sie Sie in middleware-web-Gruppe wieder, Sie wenden web-middleware, die auf der Route zweimal - solche Routen werden nicht in der Lage zu erhalten
Flash
oderSession
Daten.Das Problem, das ich hatte, war
Session::save()
verhindert Verschlucken von zeigen nach umzuleiten.Bitte überprüfen APP/kernel.php
\Illuminate\Session\Middleware\StartSession::class,
definieren, die mehrere Male
Können Sie kommentieren einen oder zu löschen. Wir müssen definieren, nur ein mal.
haben Sie es Leid, mit "redirect mit"
https://laravel.com/docs/5.2/responses#redirecting-with-flashed-session-data
Überprüfen Sie Ihre App\Kernel.php Datei.
Es können mehrere Zeilen \Beleuchten\Session\Middleware\StartSession::class,
Kommentar eines von $middlewareGroups.