개요
Laravel 13에서는 컨트롤러에 대한 미들웨어 할당과 인가 검사를 PHP 어트리뷰트로 선언할 수 있게 되었습니다. 기존의middleware() 메서드나 can 미들웨어 대신, 클래스나 메서드에 직접 어트리뷰트를 부여하는 것만으로 설정이 완료됩니다.
#[Middleware] — 미들웨어 할당하기
클래스에 적용
클래스 레벨에#[Middleware]를 부여하면, 해당 컨트롤러의 모든 액션에 미들웨어가 적용됩니다.
메서드에 적용
메서드 레벨에 부여한 미들웨어는 클래스 레벨의 미들웨어와 병합됩니다.only / except로 대상 좁히기
클래스 레벨 어트리뷰트에 only 또는 except를 지정하면 대상 메서드를 좁힐 수 있습니다.
클로저 미들웨어
어트리뷰트에는 클로저도 사용할 수 있습니다. 인라인으로 처리를 작성하고 싶을 때 편리합니다.기존 middleware() 메서드와 비교
어트리뷰트를 사용할 때는
HasMiddleware 인터페이스를 구현할 필요가 없습니다. 다만 middleware() 메서드와 어트리뷰트를 혼용하면 의도치 않은 동작이 발생할 수 있으므로, 한쪽으로 통일하는 것을 권장합니다.#[WithoutMiddleware] — 미들웨어 제외하기
클래스 레벨에서 적용된 미들웨어를 특정 메서드 또는 클래스 전체에서 제외합니다.
메서드에 적용
클래스에 적용 및 only / except
#[WithoutMiddleware]를 클래스 레벨에 부여하면, 자식 클래스를 포함한 모든 액션에서 미들웨어가 제외됩니다. only / except로 제외 범위를 제한할 수 있습니다.
#[Authorize] — 정책 기반 인가
can 미들웨어의 문법적 편의로, 정책 기반 인가 검사를 어트리뷰트로 선언할 수 있습니다.
기본 사용법
정책 인수
두 번째 인수에는 다음과 같은 값을 전달할 수 있습니다.can 미들웨어와 비교
실전 예제
리소스 컨트롤러에 적용
API 컨트롤러에 적용
어트리뷰트 처리 순서
여러 어트리뷰트가 부여된 경우, 처리 순서는 다음과 같습니다.#[Authorize]는 내부적으로 can 미들웨어로 동작하므로, #[Middleware]와 동일한 파이프라인에서 처리됩니다.정리: 어느 것을 사용해야 할까
다음 단계
PHP 어트리뷰트 (큐·Eloquent)
큐 잡이나 Eloquent 모델에서 사용할 수 있는 PHP 어트리뷰트를 설명합니다.
중급: 컨트롤러
Laravel 컨트롤러의 기본적인 사용법을 배웁니다.