Middleware no Laravel é uma camada intermediária entre as requisições HTTP e as rotas ou controladores da aplicação. Os middlewares permitem que você execute lógicas ou tarefas antes ou depois de uma rota ser executada. Eles são úteis para tarefas como autenticação, validação, manipulação de requisições e muito mais.

Vamos entender o básico de middlewares no Laravel com alguns exemplos:

  1. Criando um Middleware: Para criar um novo middleware, você pode usar o seguinte comando do Artisan:

    php artisan make:middleware MeuMiddleware
    

    Isso criará um novo arquivo do middleware em app/Http/Middleware/MeuMiddleware.php.

  2. Definindo a Lógica do Middleware: Abra o arquivo do middleware recém-criado e implemente a lógica no método handle. O método handle recebe dois parâmetros: Requisição$request e um Closure $next. O $request representa a requisição atual e o $next é uma referência para o próximo passo da cadeia de middlewares ou a execução da rota.

    Por exemplo, vamos criar um middleware simples que adiciona um cabeçalho personalizado em todas as respostas:

    // app/Http/Middleware/MeuMiddleware.php
    
    namespace App\\\\Http\\\\Middleware;
    
    use Closure;
    
    class MeuMiddleware
    {
        public function handle($request, Closure $next)
        {
            $response = $next($request);
            $response->header('X-Custom-Header', 'Valor do Cabeçalho Personalizado');
    
            return $response;
        }
    }
    
  3. Registrando um Middleware: Para que o middleware seja utilizado na aplicação, você precisa registrá-lo no Kernel do Laravel. O arquivo app/Http/Kernel.php contém uma propriedade chamada $middleware, que lista todos os middlewares globais que devem ser executados em cada requisição.

    Adicione o nome da classe do middleware que você criou à propriedade $middleware para registrá-lo:

    // app/Http/Kernel.php
    
    protected $middleware = [
        // ... outros middlewares ...
        \\\\App\\\\Http\\\\Middleware\\\\MeuMiddleware::class,
    ];
    

    Se você deseja que o middleware seja aplicado apenas em rotas específicas, você pode registrá-lo no array $routeMiddleware:

    // app/Http/Kernel.php
    
    protected $routeMiddleware = [
        // ... outros middlewares ...
        'meu' => \\\\App\\\\Http\\\\Middleware\\\\MeuMiddleware::class,
    ];
    
  4. Aplicando um Middleware a uma Rota: Para usar o middleware em uma rota específica, você pode adicionar o middleware como um grupo em suas definições de rota:

    use App\\\\Http\\\\Middleware\\\\MeuMiddleware;
    
    Route::get('/minha-rota', function () {
        // Lógica da rota aqui
    })->middleware(MeuMiddleware::class);
    

    Ou se você registrou o middleware usando um nome de chave no $routeMiddleware, pode usar o nome de chave em vez da classe:

    Route::get('/minha-rota', function () {
        // Lógica da rota aqui
    })->middleware('meu');
    

    Você também pode aplicar vários middlewares a uma única rota usando um array:

    Route::get('/minha-rota', function () {
        // Lógica da rota aqui
    })->middleware([MeuMiddleware::class, OutroMiddleware::class]);
    

Esses são os conceitos básicos de middlewares no Laravel. Eles permitem que você injete lógica específica em sua aplicação de forma modular e reutilizável, tornando sua aplicação mais flexível e fácil de manter. É importante lembrar que o middleware é uma ferramenta poderosa, mas deve ser usado com sabedoria para não prejudicar o desempenho ou a segurança da aplicação.

Laravel - The PHP Framework For Web Artisans