【Livewire】画面から実行されるメソッドに引数を持たせたい。

こんにちは。もっと公式情報を沢山ください。只野です。

Livewire」の情報少なすぎわろた。という感じでメモ書きです。

本当に小さいところに躓いている私です。

今回嵌ったのは「Livewire」のコンポーネント内のメソッドを、Web画面から実行するときに引数を渡す方法です。

1:同一画面内でのメソッド引数!

Livewire」用のPHPソースには単純に引数を設定するだけです。

    public function save($id) {
       $model = User::findOrFail($id);
       // 保存処理…
    }

実行元では下記のように、メソッド名に引数を設定するだけ。簡単ですね。これだけの情報が見つからなかったのよ。ふふ。

    <button type="button" wire:click="save(1)">

2:別画面から呼び出した際の引数!

これは公式ページにも記載があります。

Livewireのmountについて

まず「{ドキュメントルート}\toutes\web.php」に引数で渡す内容を含めたルーティング設定を行います。

    /**
     * ユーザールーティング設定
     */
    Route::prefix('user')->name('user.')->group(function() {
        //■検索
        Route::get('search/{mode?}/{value?}', SearchUser::class)->name('search');
        //■登録
        Route::get('create', CreateUser::class)->name('create');
        //■更新
        Route::get('update/{id}', UpdateUser::class)->name('update');
    });

重要なのは「Route::get(‘update/{id}’, UpdateUser::class)->name(‘update’);」ここの「‘update/{id}’」これ。ここで波括弧で括られているのが渡すパラメータ名になります。この指定方法だとパラメータは必須!

ここで「Route::get(‘search/{mode?}/{value?}’, SearchUser::class)->name(‘search’);」のようにパラメータ名の後ろにクエスチョンを付けると「‘search/{mode?}/{value?}’」任意パラメータにできる。

別画面から「Livewire」のコンポーネントを呼び出す場合、「Livewire」の機能として必ず「mount」メソッドが実行されます。

このメソッドの引数にルーティングで指定したパラメータ名と同一の引数を追加します。

    public function mount($id) {
       $model = User::findOrFail($id);
       // 初期化処理…
    }

呼び出し時は下記のようにルーティングされている内容を実行します。

    <a href="{{route('user.update', $user->id)}}">ユーザー更新</a>

第一引数はルーティング名、第二引数以降は指定したパラメータに必要な値を設定します。

パラメータが複数ある場合は下記のように指定します。

    <a href="{{route('user.search', ['mode' => 'admin', 'value' => 'abc'])}}">管理者検索モード</a>

第二引数を連想配列指定で、ルーティングで指定したパラメータ名に対して値を設定します。

分かってしまえばなんてことはない。

本日はこの辺で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です