News

Livewire Volt Has A New Class-based API

Published
Livewire Volt Has A New Class-based API image

The Laravel team recently released Volt, which allows you to build full Livewire components right in your Blade views. Initially, it was released with a functional syntax. You can import Volt's functions and wrap your Livewire functionality for state, computed properties, actions, etc. in those.

For example, a simple component for creating a post using the functional syntax:

<?php
 
use App\Models\Post;
use function Livewire\Volt\{state};
use function Livewire\Volt\{rules};
 
state([
'title' => '',
'content' => '',
]);
 
rules([
'title' => ['required', 'max:250'],
'content' => ['required', 'max:10000'],
]);
 
$save = function () {
$this->validate();
 
Post::create([
'title' => $this->title,
'content' => $this->content,
]);
 
return redirect('/posts');
}
?>
 
<form wire:submit="save">
<div>
<label>Title</label>
<input wire:model="title" type="text" />
</div>
<div>
<label>Content</label>
<textarea wire:model="content"></textarea>
</div>
 
<button>Save</button>
</form>

As of today, the Laravel team has released v1.0-beta.3 which introduces a new class-based syntax for Volt components. This allows you to write Livewire components using the more traditional syntax you're used to, but still all inside your Blade files.

For example, the same create post component written with the new class-based syntax:

<?php
 
use App\Models\Post;
use Livewire\Volt\Component;
use Livewire\Attributes\Rule;
 
new class extends Component
{
#[Rule(['required', 'max:250'])]
public $title = '';
 
#[Rule(['required', 'max:10000'])]
public $content = '';
 
public function save() {
$this->validate();
 
Post::create([
'title' => $this->title,
'content' => $this->content,
]);
 
return redirect('/posts');
}
}
?>
 
<form wire:submit="save">
<div>
<label>Title</label>
<input wire:model="title" type="text" />
</div>
<div>
<label>Content</label>
<textarea wire:model="content"></textarea>
</div>
 
<button>Save</button>
</form>

What do you think? Do you prefer the functional syntax or the more traditional class-based syntax? Personally, I like the class-based syntax a little more, but it's awesome to see the Laravel team providing multiple ways for people to build functionality!

Jason Beggs photo

TALL stack (Tailwind CSS, Alpine.js, Laravel, and Livewire) consultant and owner of designtotailwind.com.

Filed in

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article