어플리케이션에 들어오는 요청 (Request) 을 필터링하는 데에 사용된다.
예를 들면, 한 유저가 로그인이 된 채로 요청을 보내면 문제 없이 접속할 수 있지만,
로그인이 되어 있지 않은 요청이 오면 인증 미들웨어 (Auth Middleware) 는 로그인 페이지로 리다이렉션을 수행할 수 있다.
php artisan make:middleware ExampleMiddleware
app/Http/Middleware 에 파일이 생성됩니다.
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class ExampleMiddleware
{
public function handle(Request $request, Closure $next): Response
{
/**
* 어플리케이션이 요청을 처리하기 전에 작업을 수행하게 하는 로직
*/
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class ExampleMiddleware
{
public function handle(Request $request, Closure $next): Response
{
$response = $next($request);
/**
* 어플리케이션이 요청을 처리한 후 작업을 수행하게 하는 로직
*/
return $response;
}
}
애플리케이션에 대한 모든 HTTP 요청 중에 미들웨어가 실행되도록 하려면 bootstrap/app.php 파일의 전역 미들웨어 스택에 추가하면 됩니다.
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use App\Http\Middleware\ExampleMiddleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->append(ExampleMiddleware::class);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
append 메서드는 전역 미들웨어 목록의 끝에 미들웨어를 추가합니다.
목록의 시작 부분에 미들웨어를 추가하려면 이 prepend메소드를 사용해야 합니다.
ex) 단일 미들웨어 할당
use App\Http\Middleware\ExampleMiddleware;
Route::get('/profile', function () {
// ...
})->middleware(ExampleMiddleware::class);
ex) 복수의 미들웨어 할당
Route::get('/', function () {
// ...
})->middleware([First::class, Second::class]);
ex) 경로에서 미들웨어 제외
use App\Http\Middleware\ExampleMiddleware;
Route::middleware([ExampleMiddleware::class])->group(function () {
Route::get('/', function () {
// ...
});
Route::get('/profile', function () {
// ...
})->withoutMiddleware([ExampleMiddleware::class]);
});
이 방법은 경로 미들웨어만 제거할 수 있으며 전역 미들웨어에는 적용되지 않습니다 .
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use App\Http\Middleware\ExampleMiddleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->appendToGroup('group-name', [
ExampleMiddleware::class,
//미들웨어 추가
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
경로에 그룹 미들웨어 할당
Route::get('/', function () {
// ...
})->middleware('group-name');
Route::middleware(['group-name'])->group(function () {
// ...
});
라라벨 공식 미들웨어 메뉴얼 : https://laravel.com/docs/11.x/middleware
[Laravel] 라라벨 Auth 로그인 유지가 안되는 문제 해결 방법 (0) | 2024.10.31 |
---|---|
라라벨 라이프사이클과 MVC 패턴 (Life Cycle, MVC Pattern) (0) | 2024.04.11 |
라라벨 초기 세팅시 Key 생성 (0) | 2024.04.08 |
라라벨 초기 세팅 시 권한 문제 (Laravel Logs Permission Denied) (0) | 2024.04.05 |