🙆♀️
LaravelのAttributes活用術!#[CurrentUser]と#[RouteParameter]でコードをシンプルに
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] を使うと、ルートパラメータを簡単に受け取れる
- これにより、コードがスッキリし、メンテナンスしやすくなる
参考投稿
Discussion