• Время чтения ~1 мин
  • 04.08.2023

Команда 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 предоставляет людям несколько способов создания функциональности!

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297