メインコンテンツへスキップ

概要

Laravel 13 では、コントローラーへのミドルウェア割り当てと認可チェックを PHP アトリビュートで宣言できるようになりました。従来の middleware() メソッドや can ミドルウェアの代わりに、クラスやメソッドに直接アトリビュートを付与するだけで設定が完結します。
コントローラーアトリビュートはすべて Illuminate\Routing\Attributes\Controllers 名前空間にあります。

#[Middleware] — ミドルウェアを割り当てる

クラスへの適用

クラスレベルに #[Middleware] を付与すると、そのコントローラーの全アクションにミドルウェアが適用されます。
複数のミドルウェアを付与する場合は、アトリビュートを繰り返します。

メソッドへの適用

メソッドレベルに付与したミドルウェアは、クラスレベルのミドルウェアとマージされます。

only / except による絞り込み

クラスレベルのアトリビュートに only または except を指定すると、対象メソッドを絞り込めます。

クロージャーミドルウェア

アトリビュートにはクロージャーも使えます。インラインで処理を書きたい場合に便利です。

従来の middleware() メソッドとの比較

アトリビュートを使う場合は HasMiddleware インターフェイスを実装する必要はありません。ただし、middleware() メソッドとアトリビュートを混在させると意図しない動作になる可能性があるため、どちらか一方に統一することを推奨します。

#[WithoutMiddleware] — ミドルウェアを除外する

クラスレベルで適用されたミドルウェアを、特定のメソッドまたはクラス全体から除外します。

メソッドへの適用

クラスへの適用と only / except

#[WithoutMiddleware] をクラスレベルに付与すると、子クラスを含む全アクションからミドルウェアが除外されます。only / except で除外範囲を限定できます。
#[WithoutMiddleware]ルートミドルウェアにのみ有効です。app/Http/Kernel.php に登録されたグローバルミドルウェアは除外できません。

#[Authorize] — ポリシーによる認可

can ミドルウェアの糖衣構文として、ポリシーによる認可チェックをアトリビュートで宣言できます。

基本的な使い方

ポリシーの引数

第2引数には以下を渡せます。

can ミドルウェアとの比較

ルートファイルにミドルウェアを書く必要がなくなり、認可ロジックがコントローラーに集約されます。

実践的な例

リソースコントローラーへの適用

API コントローラーへの適用

アトリビュートの処理順序

複数のアトリビュートが付与されている場合、処理順序は以下のとおりです。
#[Authorize] は内部的に can ミドルウェアとして動作するため、#[Middleware] と同じパイプラインで処理されます。

まとめ:どちらを使うべきか

次のステップ

PHPアトリビュート(キュー・Eloquent)

キュージョブや Eloquent モデルで使える PHP アトリビュートの解説。

中級: コントローラー

Laravel コントローラーの基本的な使い方を学びます。
最終更新日 2026年7月15日