Configurando Middleware no Laravel

Laravel PHP Tutoriais
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.