Laravel Voltを使うと、blade.phpファイルの中に、Livewireのコードが入れられます。
Laravel Voltの使い方
まずはインストール方法から。インストールの後、4つのレベル別に、Laravel Voltの使い方をお見せします。
Laravel Voltのインストール
下記コマンドを実行します。
1 |
composer require livewire/volt |
引き続き下記を実行して、Voltのサービスプロバイダーをインストールします。
1 |
php artisan volt:install |
レベル① Laravel Voltでカウンターを作ってみる
まずは簡単なカウンターを作ってみます。
counterという名前のvoltファイルを作ります。
1 |
php artisan make:volt counter |
resources/views/livewireの中に、counter.blade.phpファイルができます。ファイルを開き、下記のように編集します。
【counter.blade.php】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php use function Livewire\Volt\{state}; // 2行追加 state(['count' => 0]); $increment = fn () => $this->count++; ?> <div style="margin:10px;"> {{-- 2行追加 --}} <h1>{{ $count }}</h1> <button wire:click="increment" style="border: 1rem solid green;">+クリックしてね</button> </div> |
resources/views/welcome.blade.phpファイルを下記のように編集して、作成したcounterファイルが表示されるようにします。
【welcome.blade.php】
1 2 3 4 5 |
<html> <body class="antialiased"> @livewire('counter') </body> </html> |
welcome.blade.phpファイルを表示すると、次のようにカウンターができています。【クリックしてね】を押すと、番号が増えていきます。
カウンターがあっさり作れました♪
レベル② 他のページにカウンターを組み込んでみる
ただ、レベル①の方法だとLivewireページの中にコードを入れることになります。結局2つのファイルが必要になってしまいますよね。
レベル②では、わざわざLivewireページを作らず、ひとつのファイルの中で、カウンター機能を実装していきます。
resources/views/welcome.blade.phpファイルの中に、下記コードをいれます。
【welcome.blade.php】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php use function Livewire\Volt\{state}; state(['count' => 0]); $increment = fn () => $this->count++; ?> <html> <body class="antialiased"> @volt('counter') <div style="margin:10px;"> {{-- 2行追加 --}} <h1>{{ $count }}</h1> <button wire:click="increment" style="border: 1rem solid green;">+クリックしてね</button> </div> @endvolt </body> </html> |
<?php ~ ?> の部分は、従来、app/Http/Livewireの中にいれていた部分です。Laravel Voltを使うと、このように、blade.phpファイルの中に入れられます。
トップページを開くと、レベル①と同じようにカウンターが表示されます。
レベル③ Laravel Voltでモーダル作成
もう少し高度な機能を実装してみましょう。下記の記事では、Livewireを使ってモーダルを作る方法を紹介しています。
こちらを、Laravel Voltを使って行っていきます。詳しい仕組みは、上記の記事をご覧ください。事前にLaravel Breezeもインストールしておきます。
本記事では、上記の記事でご紹介したコードを、Laravel Voltを使って書き換えていきます。
再びresources/views/welcome.blade.phpファイルを開きます。次のようにコードをいれます。
【welcome.blade.php】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
<?php use Livewire\Volt\Component; new class extends Component { public $showModal = false; public function openModal() { $this->showModal = true; } public function closeModal() { $this->showModal = false; } } ?> <x-guest-layout> @volt <div> <button wire:click="openModal()" type="button" class="px-4 py-2 font-bold text-white bg-blue-500 rounded hover:bg-blue-700"> モーダルを表示 </button> @if($showModal) <div class="fixed z-10 inset-0 overflow-y-auto"> <div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"> <div class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity"></div> <div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"> <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4"> <h3 class="text-lg leading-6 font-medium text-gray-900"> モーダルタイトル </h3> <div class="mt-2"> <p class="text-sm text-gray-500"> モーダルの内容をここに記述します。 </p> </div> </div> <div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse"> <button wire:click="closeModal()" type="button" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700"> 閉じる </button> </div> </div> </div> </div> @endif </div> @endvolt </x-guest-layout> |
npm run devを実行します。トップページを開くと、モーダル機能が実装されています。
【モーダルを表示】をクリックすると、下記のようにモーダルが出てきます。
レベル④ Laravel FolioとLaravel Voltを併用
最後に、Laravel FolioとLaravel Voltを組み合わせて使ってみます。詳しくは、下記をご覧ください。
Laravel Folioを使うことで、ルート設定を記述せず、Laravel Volt用ファイルを表示できます。
まずは、Laravel Folioをインストールします。
1 |
composer require laravel/folio |
1 |
php artisan folio:install |
次に、resources/views/pagesの中に、modal.blade.phpファイルを作ります。そこに、レベル③で作成したコードをそのまま貼り付けます。
/modalを開くと、次のようにモーダルが表示されます。
ルート設定もLivewire用のファイルの作成も行わず、モーダルが作れてしまいます。かなり効率的ですね。
さいごに
Laravel Voltについてご紹介しました。ご紹介したことの他にも、色々とできます。詳しくは、下記の公式マニュアルを参考にしてください。
実際に使ってみて「便利だなぁ」と思う反面、Livewire用コードが多い場合には、ページの管理がしにくくなる気もしました。
プロジェクトによっては、従来のように、Livewire用コードを分けておくほうが作りやすいかもしれません。プロジェクトによって、使い分けていこうかなと思います。
使い分けられる良いところですね。
なお、Laravel Voltは、Laravel FolioやLaravel11と共に、2023年7月のLaracon(Laravelのカンファレンス)動画で紹介された新しい機能です。
Laravel11やLaravel Folioについてもご興味あれば、こちらも見てみてくださいね。