Команда Laravel недавно выпустила Volt, который позволяет создавать полноценные компоненты Livewire прямо в представлениях Blade. Изначально он был выпущен с функциональным синтаксисом. Вы можете импортировать функции Volt и обернуть функциональность Livewire для состояния, вычисляемых свойств, действий и т. д. в тех.
Например, простой компонент для создания поста с использованием функционального синтаксиса:
<?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>
На сегодняшний день команда Laravel выпустила v1.0-beta.3, в которой представлен новый синтаксис на основе классов для компонентов Volt. Это позволяет вам писать компоненты Livewire, используя более традиционный синтаксис, к которому вы привыкли, но все это все в ваших файлах Blade.
Например, тот же компонент create post, написанный с новым синтаксисом на основе классов:
<?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>
Что вы думаете? Вы предпочитаете функциональный синтаксис или более традиционный синтаксис на основе классов? Лично мне немного больше нравится синтаксис, основанный на классах, но здорово видеть, что команда Laravel предоставляет людям несколько способов создания функциональности!