2017-06-30 5 views
1

Ich bin auf das Problem gelaufen, mit Laravel 5.2 kein Plätzchen zu setzen, und das Problem ist gelöst worden, nachdem ich this post gelesen habe. (. Also, was ich brauche, ist keine Lösung, sondern eine Erklärung)Warum withCookie() nicht funktioniert?

Kurz gesagt,

return view('welcome')->withCookie(cookie('test', 'test', 45000)); 

Dies funktioniert nicht, und es funktioniert, entweder:

public function index(CookieJar $cookieJar, Request $request) 
{ 
    if($request->referrer){ 
     $cookieJar->queue(cookie('referrer', $request->referrer, 45000)); 
    } 

    return view('welcome'); 
} 

Oder:

$response = new \Illuminate\Http\Response(view('welcome')); 
$response->withCookie(cookie('referrer', $request->referrer, 45000)); 
return $response; 

Was mich ärgert ist, dass der erste Code keine E zurückgibt Rror, während es keinen Cookie setzt, so dass es tatsächlich etwas Gültiges tut (aber das Setzen des Plätzchens nicht). Was macht es eigentlich? Und warum funktionieren die späteren 2 Lösungen?

Antwort

1

In der ersten Option enthalten Sie eigentlich keinen Cookie, sondern einen Parameter namens "Cookie", der zufällig den Wert hat, der von der Funktion cookie berechnet wird. Ich meine, Sie verwenden die Funktion withXXXX eines View, die einen Parameter namens XXXX erstellt. In der Tat sind, wenn Sie so etwas wie

{{$ cookie}}

in Blade-View-Datei, werden Sie den Wert mit der cookie Funktion erzeugt erhalten.

Also, das ist es, was es tatsächlich tut: Übergabe eines Parameters namens Cookie an den View-Builder.

Die zweite funktioniert, weil Sie ein CookieJar verwenden und das automatisch beibehalten wird.

Die dritte funktioniert, weil Sie die withCookie Funktion NICHT ein View aber ein Response, verwenden, die tatsächlich schafft und gibt einen Cookie.

TL; DR: Sie müssen den Cookie zur Antwort hinzufügen, nicht zur Ansicht.