🚰

Laravel11 属性チートシート

2025/02/12に公開

⚠️: 海外の記事を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 = '';
}

元記事

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

Discussion