概要
Laravel 13 では、コントローラーへのミドルウェア割り当てと認可チェックを PHP アトリビュートで宣言できるようになりました。従来のmiddleware() メソッドや can ミドルウェアの代わりに、クラスやメソッドに直接アトリビュートを付与するだけで設定が完結します。
#[Middleware] — ミドルウェアを割り当てる
クラスへの適用
クラスレベルに#[Middleware] を付与すると、そのコントローラーの全アクションにミドルウェアが適用されます。
メソッドへの適用
メソッドレベルに付与したミドルウェアは、クラスレベルのミドルウェアとマージされます。only / except による絞り込み
クラスレベルのアトリビュートに only または except を指定すると、対象メソッドを絞り込めます。
クロージャーミドルウェア
アトリビュートにはクロージャーも使えます。インラインで処理を書きたい場合に便利です。従来の middleware() メソッドとの比較
アトリビュートを使う場合は
HasMiddleware インターフェイスを実装する必要はありません。ただし、middleware() メソッドとアトリビュートを混在させると意図しない動作になる可能性があるため、どちらか一方に統一することを推奨します。#[WithoutMiddleware] — ミドルウェアを除外する
クラスレベルで適用されたミドルウェアを、特定のメソッドまたはクラス全体から除外します。
メソッドへの適用
クラスへの適用と only / except
#[WithoutMiddleware] をクラスレベルに付与すると、子クラスを含む全アクションからミドルウェアが除外されます。only / except で除外範囲を限定できます。
#[Authorize] — ポリシーによる認可
can ミドルウェアの糖衣構文として、ポリシーによる認可チェックをアトリビュートで宣言できます。
基本的な使い方
ポリシーの引数
第2引数には以下を渡せます。can ミドルウェアとの比較
実践的な例
リソースコントローラーへの適用
API コントローラーへの適用
アトリビュートの処理順序
複数のアトリビュートが付与されている場合、処理順序は以下のとおりです。#[Authorize] は内部的に can ミドルウェアとして動作するため、#[Middleware] と同じパイプラインで処理されます。まとめ:どちらを使うべきか
次のステップ
PHPアトリビュート(キュー・Eloquent)
キュージョブや Eloquent モデルで使える PHP アトリビュートの解説。
中級: コントローラー
Laravel コントローラーの基本的な使い方を学びます。