Piszemy własne middleware. Kontynuacja lekcji poprzednich – do dzieła.

Ok, taki route robimy:

Route::get('/get-secret-cookie', function (Request $request) {
    if($request->hasCookie('pswd')){
        $secret = $request->cookie('pswd');
        return "secret cookie: $secret";
    } else {
        return "There is no secret cookie set!";
    }
})->name('secretcookie');

Teraz przekierowanko:

Route::get('/secret-cookie-redirect', function () {
    return redirect()->route('secretcookie');
});

Nie ma opcji, żeby to cookie było. Zrobimy jednak middleware komendą:

php artisan make:middleware SecretCookieMiddleware

Pisaliśmy własny framework mający własne middleware, więc nie będę się przesadnie rozwodzić nad tym, co tu mamy:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

use Illuminate\Support\Facades\Cookie;
class SecretCookieMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle($request, Closure $next)
    {
        /** @var \Illuminate\Http\Response $response */
        if($request->hasCookie('pswd'))
        {
            return $next($request);
        }
        else
        {
            Cookie::queue(Cookie::make('pswd', '123', 129600));
            return $next($request);
        }
    }
}

Ogarnijmy tylko wszystkie importy i piszmy route:

use App\Http\Middleware\SecretCookieMiddleware;

//(...)

Route::get('/secret-cookie-redirect', function () {
    
    return redirect()->route('secretcookie');
})->middleware([SecretCookieMiddleware::class]);

Teraz cookie zostanie zapisane i wyświetlone.