0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel11 属性チートシート

Last updated at Posted at 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 = '';
}

元記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?