• Час читання ~4 хв
  • 10.10.2023

Laravel Volt

Tony Lea

Laravel Volt — це новий пакет, який був анонсований під час Laracon 2023. Volt привносить в Laravel потужність однофайлових компонентів Livewire , і він бездоганно працює з Folio. Подібно до того, як розробники React і Vue можуть писати однофайлові компоненти, Laravel Volt додає однофайлові компоненти до шаблонів блейдів. Це дозволить розробникам створювати потужні та інтерактивні компоненти, які використовують back-end та front-end.

Створення компонентів

Ви можете легко створити новий компонент Volt, виконавши команду:

php artisan make:volt counter

Це створить новий файл у resources/views/livewire каталозі під назвою counter.blade.php, з таким вмістом:

<?php

використовувати функцію Livewire\Volt\{state};

//

?>

<div>
    //
</div>

Ми можемо додати трохи коду, щоб наш компонент лічильника працював:

<?php

використовувати функцію Laravel\Volt\{state};
    state(['currentValue' => 0]);

$increment = fn () => $this->currentValue++;
?>

<div> 
    <div>current Значення: {{ $currentValue }}</div>
    <button class="MT-2" wire:click="increment">
        Приріст
    </кнопку>
</div>

Далі ми можемо створити нову сторінку фоліо для рендерингу нашого нового компонента:artisan make:

folio volt

Це створить нову сторінку фоліо, розташовану за адресою resources/views/pages/volt.blade.php. Ми можемо додати наступний код:

<x-layout>
    <div class="mt-6">
        <livewire:лічильник />
    <div>
</x-макет>

І, так само просто, у нашому додатку є простий компонент лічильника.

volt counter example
Notice that this is not just a front-end counter. The variable $currentValue is a value stored in the back-end. This means that you can easily share data between your front-end and back-end with ease 🎉

Стан

Вольта Як ви можете бачити вище, Volt дає нам можливість легко керувати станом за допомогою use function Laravel\Volt\{state}; оголошення.

Після визначення {state} оголошення у нас з'явився доступ до допоміжного методу state , який ми можемо використовувати для встановлення стану для будь-якої з наших змінних:

<?php

використовувати функцію Laravel\Volt\{state};
    state(['currentValue' => 0]);

?>

Тепер у нас буде доступ до змінної $currentValue всередині шаблону, і завдяки потужності Livewire і AlpineJS ми зможемо відстежувати стан будь-яких змінних на фронтенді та бекенді.

Volt Provide

Ми також можемо захотіти надати нашому шаблону деякі дані, однак ми не хочемо спеціально ділитися станом даних між інтерфейсом і бекендом. Для цього ми можемо скористатися декларацією {provide} :

<?php
    використовувати App\Models\Todo;
    використовувати функцію Laravel\Volt\{provide};

забезпечити (fn () => [
        'todos' => Завдання:: all (),
    ]);
?>
<div>
    @foreach($todos як $todo)
        <!-- вивести дані $todo -->
    @endforeach
</div>

Тепер, всередині нашого шаблону, ми зможемо отримати доступ до змінної $todos , яка міститиме колекцію завдань, які ми отримали з бази даних.

Ви можете використовувати { provide } і {state} в одному компоненті, що можна легко зробити за допомогою наступного коду:

<?php
    використовувати App\Models\Todo;
    використовувати функцію Laravel\Volt\{provide, state};
    
state(['title' => '']);
    
provide(fn () => [
        'todos' => Завдання:: all (),
    ]);
?>

Тепер наш шаблон матиме всі $todos доступні дані, і ми поділимося станом зі змінною під назвою $title.

Функції Volt Визначити

функції, які будуть використовуватися у ваших компонентах Volt, дуже просто. Ось приклад того, як ми можемо створити функцію для додавання нового елемента завдання до нашої бази даних:

<?php
    використовувати App\Models\Todo;
    використовувати функцію Laravel\Volt\{provide, state};
    
state(['title' => '']);
    
provide(fn () => [
        'todos' => Завдання:: all (),
    ]);

$add = function () {
        Завдання:: create([
            'title' => $this-›title,
        ]);

$this->title = ":
    };
?>

<div> 
    <form wire:submit.prevent="add"> 
        <input name="title" wire:model="title" />
        <button type="submit">Add Todo</button>
    </форма>
</div>

У наведеному вище коді, коли форму буде надіслано, вона викличе $add метод і створить нове завдання в базі даних і очистить заголовок. Досить круті 😎

правила

перевірки Volt Ви також можете дуже легко додати валідацію до своїх компонентів Volt. Ось приклад того, як ми можемо перевірити, що змінна $title не порожня і містить принаймні три символи.

<?php
    використовувати App\Models\Todo;
    використовувати функцію Laravel\Volt\{provision, rules, state};
    
state(['title' => '']);

rules(['title' => 'required|min:3']);
    
provide(fn () => [
        'todos' => Завдання:: all (),
    ]);

$add = function () {
        Завдання:: create([
            'title' => $this-›title,
        ]);

$this->title = ":
    };
?>

<div> 
    <form wire:submit.prevent="add"> 
        <input name="title" wire:model="title" />
        <button type="submit">Add Todo</button>
    </форма>
    @error ('назва')
        <span class="text-red-500">{{ $message }}</span>
    @enderror
</div>

Ви побачите, що вище ми додали нове оголошення {rules} , яке дає нам доступ до допоміжного методу, rules() що дозволяє нам додавати перевірку до будь-якого стану в нашому компоненті volt.

Висновок

Обов'язково дізнайтеся більше про встановлення та додатковий функціонал, ознайомившись із документацією Volt на https://livewire.laravel.com/docs/volt.

Volt допоможе нам створювати динамічні та інтерактивні інтерфейси користувача без необхідності використання окремих файлів. Volt дає нам колокацію коду, об'єднуючи поведінку та розмітку компонентів в одному файлі для підвищення продуктивності. Електризація речей ⚡️

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