SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

LivewireとInertiaによるLaravelのフロントエンド的画面作成入門

Livewireを使ってフロントエンド的な画面を作成する

LivewireとInertiaによるLaravelのフロントエンド的画面作成入門 第2回

入力値に関する処理をまとめられるフォームクラス

 ここで、フォームに関するロジックの再利用を考えます。

フォームクラスはFormクラスを継承

 例えば、カクテル情報を管理する場合、図4のカクテル情報の追加画面だけでなく、編集画面による更新処理も必要です。とはいえ、その画面の入力データは同じであり、バリデーションなどの処理もほぼ同じです。そのため処理コードを再利用すると、効率がよいです。

 そこで便利なのが、Livewireのフォームクラスです。このフォームクラスを作成するコマンドは、次の通りです。

php artisan livewire:form フォームクラス名

 カクテル情報のフォームクラス名をCocktailFormとして、次のコマンドを実行します。

php artisan livewire:form CocktailForm

 すると、app/Livewire/Forms/CocktailForm.phpファイルが自動生成されています。そのクラス内に、リスト4の(1)~(4)の入力値を格納するプロパティと、(6)~(7)のバリデーションとデータベースへの保存処理を移管すると、リスト5のようになります。

[リスト5]livewire-form/app/Livewire/Forms/CocktailForm.php
class CocktailForm extends Form  // (1)
{
  #[Validate("required")]  // (2)
  public string $cocktailName;  // (2)
  #[Validate("required|gte:100")]  // (2)
  public int $cocktailPrice;  // (2)
  public function store()  // (3)
  {
    $this->validate();  // (4)
    $cocktail = new Cocktail();  // (4)
    $cocktail->name = $this->cocktailName;  // (4)
    $cocktail->price = $this->cocktailPrice;  // (4)
    $cocktail->save();  // (4)
  }
}

 リスト5の(1)のように、フォームクラスは、Formクラスを継承して作ります。もっとも、このコードは、livewire:formコマンドによって自動的に記述されています。

 そして、そのフォームクラス内に、入力値に関するプロパティを定義します。リスト5では(2)が該当し、これはリスト4の(1)~(4)をそのまま転記したものとなっています。

 さらに、保存処理なども記述でき、リスト5では(3)のstore()メソッドを定義し、その中に(4)のように記述しています。このコードは、リスト4の(6)と(7)のコードをそのまま転記しています。

コンポーネントクラスではフォームクラスとプロパティとする

 こうしたフォームクラスを作成した場合、コンポーネントクラスでは、リスト6の(1)のようにフォームクラスをプロパティとします。add()メソッド内は(2)のように、フォームクラスのstore()メソッドを実行するだけとなります。

[リスト6]livewire-form/app/Livewire/CocktailAdd.php
class CocktailAdd extends Component
{
  public CocktailForm $cocktailForm;  // (1)
  public function add()
  {
    $this->cocktailForm->store();  // (2)
    return redirect()->to("/cocktailList");
  }
  :
}

 ただし、コンポーネントビューファイルでの値の表示では、プロパティがフォームクラスになったのに合わせて、cocktailForm経由となる点には注意してください(リスト7)。

[リスト7]livewire-form/resources/views/livewire/cocktail-add.blade.php
  :
<input type="text" wire:model="cocktailForm.cocktailName" id="cocktailName">
<div>@error("cocktailForm.cocktailName") {{$message}} @enderror</div><br>
  :

編集画面の表示はmount()でフォームクラスにデータを渡す

 このフォームクラスを利用して編集画面を表示させる場合、リスト8のようになります。

[リスト8]livewire-form/app/Livewire/Forms/CocktailForm.php
class CocktailForm extends Form
{
  public ?Cocktail $cocktail;  // (1)
  :
  public function setCocktail(Cocktail $cocktail)  // (2)
  {
    $this->cocktail = $cocktail;  // (3)
    $this->cocktailName = $cocktail->name;  // (3)
    $this->cocktailPrice = $cocktail->price;  // (3)
  }
}

 リスト8の(1)のように、Cocktailモデルクラスのプロパティと、(2)のようにそのセッタを定義します。セッタ内では(3)のようにプロパティに各値を格納します。

 その上で、コンポーネントクラスでは、リスト9のように、mount()メソッド内でこのメソッドを呼び出してモデルオブジェクトを渡します。

[リスト9]livewire-form/app/Livewire/CocktailEdit.php
class CocktailEdit extends Component
{
  public CocktailForm $cocktailForm;
  public function mount(Cocktail $cocktail)
  {
    $this->cocktailForm->setCocktail($cocktail);
  }
    :
}

 なお、リスト9のmount()の引数は、Cocktailモデルオブジェクトとなっています。これは、コンポーネントクラスでも、Laravel本体同様に、ルートモデルバインディングが利用できるからです。

 あとは、追加画面同様に、編集画面でもwire:modelを利用してcocktailFormの各プロパティを表示させれば、データベース内の値が入力コントロール上に表示されます。

まとめ

 Laravelのフロントエンド的画面作成方法を紹介する連載の第2回目は、いかがでしたでしょうか。

 今回は、前回に続いてLivewireを掘り下げ、よりフロントエンド的な処理の実装方法を紹介しました。Livewireに関しての解説は今回で終了です。

 次回は、InertiaとVueを組み合わせた画面の作成方法の基礎を紹介します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
LivewireとInertiaによるLaravelのフロントエンド的画面作成入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/21545 2025/05/30 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー