2016-03-22 4 views
7

Ich setze Cookie auf einige Klick-Ereignis. Dann, nach Wert in Cookie speichern, möchte ichWie arbeite ich mit Cookies in Laravel 5.2

  1. prüfen Existenz Cookie
  2. Get-Cookie-Werte

ich eine Funktion unter Bezugnahme Laravel offizielle Dokumentation entwickelt haben. Die Konsole zeigt an, dass Cookies gesetzt wurden. Aber danach kann ich nicht zwei Punkte (in der obigen Liste erwähnt) für die Ansicht (Blade-Vorlage) lösen. Es zeigt immer (Cookie::get('cookie.clients')) 'null'. Die Browserkonsole zeigt jedoch das Cookie an. Wenn jemand Antwort weiß, wird es geschätzt.

Hier ist mein Code.

-Controller

use App\Client; 
use App\Http\Requests; 
use Illuminate\Http\Request; 
use Validator; 
use App\Http\Controllers\Controller; 
use App\Repositories\ClientRepository; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Cookie; 

class ClientController extends Controller 
{ 
    public function cookieadd(Request $request, Client $client) 
    { 
     $clients = []; 
     if (Cookie::get('cookie.clients') != null) 
     { 
      $clients = Cookie::get('cookie.clients'); 
     } 
     array_push($clients, $client); 

     Cookie::forever('cookie.clients', $clients); 

     return redirect('/client'); 
    } 
} 

Ansicht

@if (Cookie::get('cookie.clients') != null) 
<p>cookie is set</p> 
@else 
<p>cookie isn't set</p> 
@endif 
+0

Setzen Sie den Cookie über Javascript in "Click Event" oder durch Aufruf der Methode 'cookieadd' in Ihrem' Clientcontroller'? – Padarom

+0

@Padarom, durch Aufruf der Methode 'cookieadd()' –

Antwort

4

Sie ein Cookie-Objekt erstellen, aber Sie sich nicht mit der Antwort zu senden.

Sie können entweder, fügen Sie es direkt auf Ihre Antwort in einem Controller

$cookie = Cookie::forever('cookie.clients', $clients); 

return redirect('/client')->withCookie($cookie); 

Oder Sie können ein Cookie Warteschlange und die AddQueuedCookiesToResponse Middleware verwenden automatisch in der Reaktion hinzuzufügen.

Cookie::queue(Cookie::forever('cookie.clients', $clients)); 

return redirect('/client'); 
1

Hier ist eine andere Perspektive.

Wenn ich richtig verstanden habe, haben Sie Javascript verwendet, um den Cookie auf der Client-Seite zu setzen, und Sie möchten es auf der Serverseite abholen.

Laravel verschlüsselt seine Cookies und wenn Sie $request->cookies() verwenden, erhalten Sie die entschlüsselten Werte, und das Abrufen der Cookies von Client-Seite besteht nicht die Entschlüsselung und wir erhalten null s. Ich denke, ich war nicht in der Lage, den entsprechenden Quellcode auszugraben :)

Sie können immer noch das rohe PHP $_COOKIE['cookie_clients'] verwenden, um den vom Client gesetzten Cookie abzurufen. Hinweis, . wird durch PHP (as seen on php.net) in _ konvertiert.

Alternativ können Sie den Namen des Cookies von Interesse in $except in Http/Middleware/EncryptCookies.php, fügen Sie, die Sie mit dem mehr Laravel Ansatz von $request->cookie() holen ermöglicht werden.

Ich bin mir sicher, es gibt viele andere Möglichkeiten, hier in Laravel herumzulaufen, hoffentlich gibt das Ihnen eine Vorstellung davon, wo Sie suchen sollten, wenn Sie beide Ansätze nicht mögen. Viel Glück.