⚠️: 海外の記事をchatGPTで要約しただけのもの、主に自分用
Laravel & Livewire PHP Attributes チートシート
この記事では、Laravel の Container Attributes と Livewire Attributes をそれぞれ個別の見出しとして整理したチートシートを紹介します。これにより、各属性の目的や使用例をすぐに確認できます。
Laravel Container Attributes
#[Auth]
認証マネージャを注入するための属性です。
使用例:
use Illuminate\Container\Attributes\Auth;
use Illuminate\Contracts\Auth\Guard;
class PhotoController extends Controller
{
    public function __construct(
        #[Auth('web')]
        protected Guard $auth,
    ) {
        // ...
    }
}
#[Cache]
キャッシュマネージャを注入するための属性です。
使用例:
use Illuminate\Container\Attributes\Cache;
use Illuminate\Contracts\Cache\Repository;
class PhotoController extends Controller
{
    public function __construct(
        #[Cache('redis')]
        protected Repository $cache,
    ) {
        // ...
    }
}
#[Config]
設定値を直接注入する属性です。
使用例:
use Illuminate\Container\Attributes\Config;
class PhotoController extends Controller
{
    public function __construct(
        #[Config('app.timezone')]
        protected string $timezone,
    ) {
        // ...
    }
}
#[CurrentUser]
現在認証されているユーザーを注入するための属性です。
使用例:
use Illuminate\Container\Attributes\CurrentUser;
use App\Models\User;
class PhotoController extends Controller
{
    public function __construct(
        #[CurrentUser]
        User $currentUser
    ) {
        // $currentUser は認証済みユーザーのインスタンス
    }
}
#[DB]
特定のデータベース接続を注入するための属性です。
使用例:
use Illuminate\Container\Attributes\DB;
use Illuminate\Database\Connection;
class PhotoController extends Controller
{
    public function __construct(
        #[DB('mysql')]
        protected Connection $connection,
    ) {
        // 'mysql' 接続が注入される
    }
}
#[Log]
ロガーインスタンスを注入するための属性です。
使用例:
use Illuminate\Container\Attributes\Log;
use Psr\Log\LoggerInterface;
class PhotoController extends Controller
{
    public function __construct(
        #[Log('daily')]
        protected LoggerInterface $log,
    ) {
        // ロガーインスタンスが注入される
    }
}
#[RouteParameter]
ルートパラメータを取得して注入するための属性です。
使用例:
use App\Models\Photo;
use Illuminate\Container\Attributes\RouteParameter;
class PhotoController extends Controller
{
    public function __construct(
        #[RouteParameter('photo')]
        protected Photo $photo,
    ) {
        // ルートパラメータ 'photo' が注入される
    }
}
#[Storage]
ストレージマネージャを注入するための属性です。
使用例:
use Illuminate\Container\Attributes\Storage;
use Illuminate\Contracts\Filesystem\Filesystem;
class PhotoController extends Controller
{
    public function __construct(
        #[Storage('local')]
        protected Filesystem $filesystem
    ) {
        // 'local' ストレージが注入される
    }
}
#[Tag]
サービスにタグを付け、後でまとめて取得するための属性です。
使用例:
use Illuminate\Container\Attributes\Tag;
class PhotoController extends Controller
{
    public function __construct(
        #[Tag('reports')]
        protected iterable $reports,
    ) {
        // 'reports' タグでバインドされたサービス群が注入される
    }
}
Livewire Attributes
#[Computed]
Livewire コンポーネント内で「派生」プロパティを作成するための属性です。
使用例:
use Livewire\Attributes\Computed;
class UserProfile extends Component
{
    public $firstName;
    public $lastName;
    #[Computed]
    public function getFullName()
    {
        return "{$this->firstName} {$this->lastName}";
    }
}
#[Isolate]
コンポーネントを他と分離し、サーバーラウンドトリップ時に独立して動作させる属性です。
使用例:
use Livewire\Attributes\Isolate;
#[Isolate]
class TodoList extends Component
{
    // ...
}
#[Js]
JavaScript 側との直接バインディングを可能にする属性です。
使用例:
use Livewire\Attributes\Js;
class NotificationComponent extends Component
{
    #[Js]
    public $isVisible = true;
}
#[Layout]
コンポーネントで使用するレイアウトファイルを指定する属性です。
使用例:
use Livewire\Attributes\Layout;
#[Layout('layouts.dashboard')]
class Dashboard extends Component
{
    // ...
}
#[Lazy]
コンポーネントをビューポートに入ったタイミングで読み込む遅延ロードを指定する属性です。
使用例:
use Livewire\Attributes\Lazy;
#[Lazy]
class UserProfile extends Component
{
    // ...
}
#[Locked]
フロントエンドからの変更を防ぐため、特定のプロパティをロックする属性です。
使用例:
use Livewire\Attributes\Locked;
class UserSettings extends Component
{
    #[Locked]
    public $userId;
}
#[Modelable]
親コンポーネントから子コンポーネントへプロパティをバインドするための属性です。
使用例:
use Livewire\Attributes\Modelable;
class PostForm extends Component
{
    #[Modelable]
    public $title;
}
#[On]
特定のイベントに対してメソッドをバインドする属性です。
使用例:
use Livewire\Attributes\On;
class UserRegistered extends Component
{
    #[On('userRegistered')]
    public function handleNewUser($user)
    {
        // イベント発火時に実行される処理
    }
}
#[Reactive]
プロパティをリアクティブにし、データ変更を子コンポーネントに自動反映させる属性です。
使用例:
use Livewire\Attributes\Reactive;
class Counter extends Component
{
    #[Reactive]
    public $count = 0;
    public function increment()
    {
        $this->count++;
    }
}
#[Renderless]
ビューのレンダリングを行わず、ロジック専用のコンポーネントとして動作させる属性です。
使用例:
use Livewire\Attributes\Renderless;
class FormLogic extends Component
{
    #[Renderless]
    public function validateForm()
    {
        // フォームバリデーションのロジック
    }
}
#[Rule]
プロパティに対するバリデーションルールを定義する属性です。
使用例:
use Livewire\Attributes\Rule;
class RegisterUser extends Component
{
    #[Rule('required|string|max:255')]
    public $username;
}
#[Session]
コンポーネントのプロパティをセッションにバインドする属性です。
使用例:
use Livewire\Attributes\Session;
class UserProfile extends Component
{
    #[Session]
    public $theme;
}
#[Title]
コンポーネントのビューに適用されるページタイトルを設定する属性です。
使用例:
use Livewire\Attributes\Title;
#[Title('My Custom Page Title')]
class PageTitle extends Component
{
    public function render()
    {
        return view('page');
    }
}
#[Url]
現在の URL をプロパティにバインドし、動的に反映させる属性です。
使用例:
use Livewire\Attributes\Url;
class Navigation extends Component
{
    #[Url]
    public $currentUrl = '';
}
元記事