Kontynuujemy poznawanie Laravela. Pochylamy się nad zagadnieniem plików cookies w Laravelu. Do dzieła.

Ok, pierwszy route, jaki dodamy do naszego web.php:

Route::get('/get-cookie', function () {
    $userName = request()->cookie('user_name');
    return "User Name: $userName";
});

Swoją drogą ja wolę zawsze Request wstrzykiwać:

Route::get('/get-cookie', function (Request $request) {
    $userName = $request->cookie('user_name');
    return "User Name: $userName";
});

Ok, teraz set-cookie:

Route::get('/set-cookie', function () {
    $cookie = cookie('user_name', 'John Doe', 60); // Name, Value, Minutes
    return response('Cookie has been set')->cookie($cookie);
});

Teraz forget cookie:

Route::get('/forget-cookie', function () {
    $cookie = cookie('user_name', 'John Doe', -1);
    return redirect()->back()->withCookie($cookie);;
});

Nie wystarczy ustawić minusowy czas. Aby się zapisało musimy to cookie zapisać do zmiennej i w jakiś sposób odesłać, np. z withCookie. Dopiero wtedy się zapisuje.

Czyli albo jakiś redirect z ->withCookie, albo response z ->cookie:

return response('Hello World')->cookie($cookie);

Dopiero po odesłaniu response/redirecta to się zapisuje, inaczej jest tylko w pamięci.

Ok, set-cookie-redirect:

Route::get('/set-cookie-redirect', function () {
    $cookie = cookie('user_name', 'John Doe', 60); // Name, Value, Minutes
    return redirect("/get-cookie")->withCookie($cookie);
});

Tutaj też to cookie tworzy w pamięci ten plik, żeby się zapisał musimy go dołączyć do redirecta, cookie to nie odpowiednik setcookie z czystego PHP, ale warstwa abstrakcji, która musi być dopisana do response/redirect aby zaobserwować efekt.

Ok, jak sprawdzić, czy cookie istnieje? Łatwo:

Route::get('/get-cookie', function (Request $request) {
    if($request->hasCookie('user_name')){
        $userName = $request->cookie('user_name');
        return "User Name: $userName";
    } else {
        return "Hello stranger!";
    }
});

I to by było na tyle, jeśli chodzi o pliki cookies w Laravelu.