🙆‍♀️

LaravelのAttributes活用術!#[CurrentUser]と#[RouteParameter]でコードをシンプルに

2025/02/25に公開

LaravelでAttributesをもっと活用しよう!

PHP 8.0で導入されたAttributes(属性)を、Laravelでもより活用できることをご存知でしょうか?最近、X(旧Twitter)で #[CurrentUser]#[RouteParameter] を使うことで、コードがよりシンプルになるという話題を見かけました。

これらのAttributesを使えば、認証済みユーザーやルートパラメータを、コードの中でスマートに受け取れるようになります。本記事では、実際のLaravel開発での活用法を詳しく見ていきましょう。


Attributesの基本:#[CurrentUser] と #[RouteParameter]

1. #[CurrentUser]

この属性を使うと、Auth::user() を毎回呼び出さなくても、コントローラやリクエストの引数に直接認証済みユーザーを注入できます。

2. #[RouteParameter]

ルートパラメータ(例:/users/{user}{user} の部分)を、そのまま引数として受け取ることができます。これにより、コントローラのメソッドがシンプルになり、コードの可読性が向上します。


サンプルコード

以下は、これらのAttributesを活用して、ユーザーの権限チェックを行う方法です。

use Illuminate\Container\Attributes\CurrentUser;
use Illuminate\Container\Attributes\RouteParameter;

public function authorize(
    #[CurrentUser] // 認証済みのユーザーを取得
    ?User $currentUser,
    #[RouteParameter('user')] // ルートの 'user' パラメータを取得
    User $user
): bool {
    return (bool) $currentUser?->can('update', $user);
}

この方法を使うと、これまでのように Auth::user() を呼び出す必要がなくなり、コードがスッキリします。


実際の開発での活用例

例えば、以下のようなシチュエーションで役立ちます。

  • ミドルウェアやリクエストクラスでの認証チェック
  • コントローラメソッドの簡潔化
  • APIリクエストの処理をよりスマートに

実際に使ってみると、思った以上に便利です!


まとめ

  • #[CurrentUser] を使うと、認証済みユーザーを直接取得できる
  • #[RouteParameter] を使うと、ルートパラメータを簡単に受け取れる
  • これにより、コードがスッキリし、メンテナンスしやすくなる

参考投稿

https://x.com/MrPunyapal/status/1892242635215237549

Laravelダイジェスト

Discussion