Configurando Middleware no Laravel

A partir do
Laravel 11
, a configuração do middleware mudou de usar o Kernel HTTP para o arquivo bootstrap do aplicativo. Embora alguns aplicativos existentes atualizados do Laravel 10 para o Laravel 11 e 12 possam ter o middleware definido, um novo aplicativo Laravel não é fornecido com uma
app/Http/Middleware
pasta:
O Laravel 11 introduz uma nova estrutura de aplicativo padrão com menos arquivos padrão. Ou seja, novos aplicativos Laravel contêm menos provedores de serviço, middleware e arquivos de configuração.
No entanto, não recomendamos que os aplicativos Laravel 10 que estão sendo atualizados para o Laravel 11 tentem migrar sua estrutura de aplicativo, pois o Laravel 11 foi cuidadosamente ajustado para também oferecer suporte à estrutura de aplicativo do Laravel 10.
Então não se desanime se seu aplicativo contiver o middleware Laravel padrão. É possível que o aplicativo tenha atualizado para a versão mais recente, mas tenha mantido o middleware do aplicativo gerado na estrutura do aplicativo.
Configurando Middleware no Laravel 11+
Toda a configuração de middleware do Laravel agora acontece no
bootstrap/app.php
arquivo usando o
withMiddleware()
método . Desse arquivo você pode definir middleware global, append, prepend, alias, etc.
Se você estiver vindo de aplicações Laravel 10, você usa o
app/Http/Kernel.php
arquivo para configurar rotas usando propriedades de classe. Para middleware global, você usa a
$middleware
propriedade:
protected $middleware = [ // \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, \Illuminate\Http\Middleware\HandleCors::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,];
A partir do Laravel 11, a
Kernel
classe não faz parte do código do aplicativo. Aqui está um exemplo de definição de um middleware global:
// bootstrap/app.php use App\Http\Middleware\LogRequest; ->withMiddleware(function (Middleware $middleware) { // Append to the end of the middleware stack $middleware->append(LogRequest::class);})
Se você quiser adicionar middleware global ao início da pilha, você pode usar o método prepend:
use App\Http\Middleware\LogRequest; ->withMiddleware(function (Middleware $middleware) { // Add middleware to the beginning of the middleware stack $middleware->prepend(LogRequest::class);})
Definindo grupos de middleware
No Laravel 10 ou anterior, você define um grupo de middleware usando a propriedade de grupos de middleware do Kernel no
app/Http/Kernel.php
arquivo:
protected $middlewareGroups = [ 'web' => [ // ... ], 'api' => [ // ... ], 'group-1' => [ // ... ],];
Em novos aplicativos Laravel, você pode usar prepend/append para agrupar métodos:
$middleware->prependToGroup('group-1', First::class); $middleware->appendToGroup('group-1', [ First::class, Second::class,);
Você também pode se perguntar: "Como faço para personalizar um dos grupos integrados, como
web
ou
API
?" Você pode fazer isso com os
métodos
web
e respectivos:
api
$middleware->web(append: [ ExampleWebMiddleware::class,]); $middleware->api(prepend: [ ExampleApiMiddleware::class,]); $middleware->api(remove: [ ExampleApiMiddleware::class,]);
Middleware de classificação
No Laravel 10, a prioridade do middleware era definida com uma
$middlewarePriority
propriedade no arquivo HTTP Kernel.php:
protected $middlewarePriority = [ \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class, \Illuminate\Cookie\Middleware\EncryptCookies::class, // ...];
Como você já deve ter adivinhado, você pode configurar a prioridade usando o
app.php
arquivo bootstrap usando o
priority
método:
->withMiddleware(function (Middleware $middleware) { $middleware->priority([ // ]);
Alias de Middleware
No Laravel 10, você usa a propriedade do Kernel
$middlewareAliases
para mapear um nome de string de alias para um middleware, para que você possa adicionar middleware convenientemente a rotas e grupos:
protected $middlewareAliases = [ 'auth' => \App\Http\Middleware\Authenticate::class, // ...];
A partir do Laravel 11, você usa o
alias
método:
->withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'log' => LogRequest::class ]);}); // In a route you can use `log`Route::get('/messages/{message}', function () { // ...})->middleware('log');
Saber mais
Você pode aprender tudo sobre definição, configuração e uso de middleware nos últimos documentos do Laravel . Você pode conferir os últimos documentos do Middleware para o Laravel 12, mas certifique-se de usar a documentação apropriada com base na sua versão do Laravel.