• Czas czytania ~2 min
  • 04.08.2023

Zespół Laravel niedawno wydał Volt, który umożliwia tworzenie pełnych komponentów Livewire bezpośrednio w widokach Blade. Początkowo został wydany ze składnią funkcjonalną. Możesz importować funkcje Volta i owijać funkcjonalność Livewire dla stanu, obliczonych właściwości, działań itp. w tych.

Na przykład prosty komponent do tworzenia wpisu przy użyciu składni funkcjonalnej:

<?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>

Na dzień dzisiejszy zespół Laravel wydał v1.0-beta.3, który wprowadza nową składnię opartą na klasach dla komponentów Volt. Pozwala to na pisanie komponentów Livewire przy użyciu bardziej tradycyjnej składni, do której jesteś przyzwyczajony, ale nadal w plikach Blade.

Na przykład ten sam komponent create post napisany z nową składnią opartą na klasie:

<?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>

Co o tym sądzisz? Czy wolisz składnię funkcjonalną czy bardziej tradycyjną składnię opartą na klasach? Osobiście bardziej podoba mi się składnia oparta na klasach, ale wspaniale jest widzieć, jak zespół Laravel zapewnia ludziom wiele sposobów budowania funkcjonalności!

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

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...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297