Laravel11 属性チートシート 

⚠️: 海外の記事をchatGPTで要約しただけのもの、主に自分用

---

# Laravel & Livewire PHP Attributes チートシート

この記事では、Laravel の Container Attributes と Livewire Attributes をそれぞれ個別の見出しとして整理したチートシートを紹介します。これにより、各属性の目的や使用例をすぐに確認できます。

---

## Laravel Container Attributes

### #[Auth]
認証マネージャを注入するための属性です。  
**使用例:**
```php
use Illuminate\Container\Attributes\Auth;
use Illuminate\Contracts\Auth\Guard;

class PhotoController extends Controller
{
    public function __construct(
        #[Auth('web')]
        protected Guard $auth,
    ) {
        // ...
    }
}
```

---

### #[Cache]
キャッシュマネージャを注入するための属性です。  
**使用例:**
```php
use Illuminate\Container\Attributes\Cache;
use Illuminate\Contracts\Cache\Repository;

class PhotoController extends Controller
{
    public function __construct(
        #[Cache('redis')]
        protected Repository $cache,
    ) {
        // ...
    }
}
```

---

### #[Config]
設定値を直接注入する属性です。  
**使用例:**
```php
use Illuminate\Container\Attributes\Config;

class PhotoController extends Controller
{
    public function __construct(
        #[Config('app.timezone')]
        protected string $timezone,
    ) {
        // ...
    }
}
```

---

### #[CurrentUser]
現在認証されているユーザーを注入するための属性です。  
**使用例:**
```php
use Illuminate\Container\Attributes\CurrentUser;
use App\Models\User;

class PhotoController extends Controller
{
    public function __construct(
        #[CurrentUser]
        User $currentUser
    ) {
        // $currentUser は認証済みユーザーのインスタンス
    }
}
```

---

### #[DB]
特定のデータベース接続を注入するための属性です。  
**使用例:**
```php
use Illuminate\Container\Attributes\DB;
use Illuminate\Database\Connection;

class PhotoController extends Controller
{
    public function __construct(
        #[DB('mysql')]
        protected Connection $connection,
    ) {
        // 'mysql' 接続が注入される
    }
}
```

---

### #[Log]
ロガーインスタンスを注入するための属性です。  
**使用例:**
```php
use Illuminate\Container\Attributes\Log;
use Psr\Log\LoggerInterface;

class PhotoController extends Controller
{
    public function __construct(
        #[Log('daily')]
        protected LoggerInterface $log,
    ) {
        // ロガーインスタンスが注入される
    }
}
```

---

### #[RouteParameter]
ルートパラメータを取得して注入するための属性です。  
**使用例:**
```php
use App\Models\Photo;
use Illuminate\Container\Attributes\RouteParameter;

class PhotoController extends Controller
{
    public function __construct(
        #[RouteParameter('photo')]
        protected Photo $photo,
    ) {
        // ルートパラメータ 'photo' が注入される
    }
}
```

---

### #[Storage]
ストレージマネージャを注入するための属性です。  
**使用例:**
```php
use Illuminate\Container\Attributes\Storage;
use Illuminate\Contracts\Filesystem\Filesystem;

class PhotoController extends Controller
{
    public function __construct(
        #[Storage('local')]
        protected Filesystem $filesystem
    ) {
        // 'local' ストレージが注入される
    }
}
```

---

### #[Tag]
サービスにタグを付け、後でまとめて取得するための属性です。  
**使用例:**
```php
use Illuminate\Container\Attributes\Tag;

class PhotoController extends Controller
{
    public function __construct(
        #[Tag('reports')]
        protected iterable $reports,
    ) {
        // 'reports' タグでバインドされたサービス群が注入される
    }
}
```

---

## Livewire Attributes

### #[Computed]
Livewire コンポーネント内で「派生」プロパティを作成するための属性です。  
**使用例:**
```php
use Livewire\Attributes\Computed;

class UserProfile extends Component
{
    public $firstName;
    public $lastName;

    #[Computed]
    public function getFullName()
    {
        return "{$this->firstName} {$this->lastName}";
    }
}
```

---

### #[Isolate]
コンポーネントを他と分離し、サーバーラウンドトリップ時に独立して動作させる属性です。  
**使用例:**
```php
use Livewire\Attributes\Isolate;

#[Isolate]
class TodoList extends Component
{
    // ...
}
```

---

### #[Js]
JavaScript 側との直接バインディングを可能にする属性です。  
**使用例:**
```php
use Livewire\Attributes\Js;

class NotificationComponent extends Component
{
    #[Js]
    public $isVisible = true;
}
```

---

### #[Layout]
コンポーネントで使用するレイアウトファイルを指定する属性です。  
**使用例:**
```php
use Livewire\Attributes\Layout;

#[Layout('layouts.dashboard')]
class Dashboard extends Component
{
    // ...
}
```

---

### #[Lazy]
コンポーネントをビューポートに入ったタイミングで読み込む遅延ロードを指定する属性です。  
**使用例:**
```php
use Livewire\Attributes\Lazy;

#[Lazy]
class UserProfile extends Component
{
    // ...
}
```

---

### #[Locked]
フロントエンドからの変更を防ぐため、特定のプロパティをロックする属性です。  
**使用例:**
```php
use Livewire\Attributes\Locked;

class UserSettings extends Component
{
    #[Locked]
    public $userId;
}
```

---

### #[Modelable]
親コンポーネントから子コンポーネントへプロパティをバインドするための属性です。  
**使用例:**
```php
use Livewire\Attributes\Modelable;

class PostForm extends Component
{
    #[Modelable]
    public $title;
}
```

---

### #[On]
特定のイベントに対してメソッドをバインドする属性です。  
**使用例:**
```php
use Livewire\Attributes\On;

class UserRegistered extends Component
{
    #[On('userRegistered')]
    public function handleNewUser($user)
    {
        // イベント発火時に実行される処理
    }
}
```

---

### #[Reactive]
プロパティをリアクティブにし、データ変更を子コンポーネントに自動反映させる属性です。  
**使用例:**
```php
use Livewire\Attributes\Reactive;

class Counter extends Component
{
    #[Reactive]
    public $count = 0;

    public function increment()
    {
        $this->count++;
    }
}
```

---

### #[Renderless]
ビューのレンダリングを行わず、ロジック専用のコンポーネントとして動作させる属性です。  
**使用例:**
```php
use Livewire\Attributes\Renderless;

class FormLogic extends Component
{
    #[Renderless]
    public function validateForm()
    {
        // フォームバリデーションのロジック
    }
}
```

---

### #[Rule]
プロパティに対するバリデーションルールを定義する属性です。  
**使用例:**
```php
use Livewire\Attributes\Rule;

class RegisterUser extends Component
{
    #[Rule('required|string|max:255')]
    public $username;
}
```

---

### #[Session]
コンポーネントのプロパティをセッションにバインドする属性です。  
**使用例:**
```php
use Livewire\Attributes\Session;

class UserProfile extends Component
{
    #[Session]
    public $theme;
}
```

---

### #[Title]
コンポーネントのビューに適用されるページタイトルを設定する属性です。  
**使用例:**
```php
use Livewire\Attributes\Title;

#[Title('My Custom Page Title')]
class PageTitle extends Component
{
    public function render()
    {
        return view('page');
    }
}
```

---

### #[Url]
現在の URL をプロパティにバインドし、動的に反映させる属性です。  
**使用例:**
```php
use Livewire\Attributes\Url;

class Navigation extends Component
{
    #[Url]
    public $currentUrl = '';
}
```

---

## 元記事

https://nabilhassen.com/complete-guide-to-laravel-and-livewire-php-attributes-23-attributes