• Czas czytania ~3 min
  • 10.10.2023

Laravel Volt

Tony Lea

Laravel Volt to nowy pakiet, który został ogłoszony podczas Laracon 2023. Volt przenosi moc pojedynczych komponentów Livewire do Laravel i bezproblemowo współpracuje z Folio. Podobnie jak programiści React i Vue mogą pisać komponenty jednoplikowe, Laravel Volt wprowadza komponenty jednoplikowe do szablonów kaset. Umożliwi to programistom tworzenie potężnych i interaktywnych komponentów, które wykorzystują back-end i front-end.

Tworzenie komponentów

Możesz łatwo utworzyć nowy komponent Volt, uruchamiając:php artisan make:

volt counter

Spowoduje to utworzenie nowego pliku w resources/views/livewire katalogu o nazwie , o counter.blade.phpnastępującej zawartości:

<?php

użyj funkcji Livewire\Volt\{state};

//

?>

<div>
    //
</div>

Możemy dodać trochę kodu, aby nasz komponent licznika działał

: <?php

użyj funkcji Laravel\Volt\{state};
    state(['currentValue' => 0]);

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

<div> 
    <div>current Wartość: {{ $currentValue }}</div>
    <button class="mt-2" wire:click="increment">
        Wzrost
    </przycisk>
</div>

Następnie możemy utworzyć nową stronę folio, aby renderować nasz nowy komponent:artisan make:

folio volt

Spowoduje to wygenerowanie nowej strony folio znajdującej się pod adresem resources/views/pages/volt.blade.php. Możemy dodać następujący kod:

 <x-layout>
    <div class="mt-6">
        <livewire:licznik />
    <div>
</x-layout>

I tak proste, jak to, że mamy prosty komponent licznika w naszej aplikacji.

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 🎉

Stan

wolta Jak widać z góry, Volt daje nam możliwość łatwego zarządzania stanem za pomocą use function Laravel\Volt\{state}; deklaracji.

Po zdefiniowaniu {state} deklaracji mamy teraz dostęp do metody helper, której możemy użyć do state ustawienia stanu dla dowolnej z naszych zmiennych:

<?php

użyj funkcji Laravel\Volt\{state};
    state(['currentValue' => 0]);

?>

Teraz będziemy mieli dostęp do zmiennej $currentValue wewnątrz szablonu, a dzięki mocy Livewire i AlpineJS możemy śledzić stan dowolnych zmiennych na front-endzie i back-endzie.

Volt Provide

Możemy również chcieć dostarczyć naszemu szablonowi pewne dane; jednak nie chcemy specjalnie udostępniać stanu danych między front-endem a back-endem. Aby to zrobić, możemy skorzystać z deklaracji

 {provide}:<?php
    użyj App\Models\Todo;
    użyj funkcji Laravel\Volt\{provide};

podaj (fn () => [
        'todos' => Todo:: all (),
    ]);
?>
<div>
    @foreach($todos jak $todo)
        <!-- wyprowadzać dane $todo -->
    @endforeach
</div>

Teraz wewnątrz naszego szablonu będziemy mogli uzyskać dostęp do zmiennej $todos, która będzie zawierać kolekcję Todo, które pobraliśmy z bazy danych.

Możesz użyć {provide} i {state} w tym samym komponencie, co można łatwo osiągnąć za pomocą następującego kodu:

<?php
    użyj App\Models\Todo;
    użyj funkcji Laravel\Volt\{provide, state};
    
state(['title' => '']);
    
provide(fn () => [
        'todos' => Todo:: all (),
    ]);
?>

Teraz nasz szablon będzie zawierał $todos wszystkie dostępne dane i udostępnimy stan zmiennej o nazwie $title.

Funkcje

Volt Definiowanie funkcji, które mają być używane w komponentach Volt, jest bardzo proste. Oto przykład, w jaki sposób możemy utworzyć funkcję, aby dodać nowy element do zrobienia do naszej bazy danych:

<?php
    użyj App\Models\Todo;
    użyj funkcji Laravel\Volt\{provide, state};
    
state(['title' => '']);
    
provide(fn () => [
        'todos' => Todo:: all (),
    ]);

$add = function () {
        Todo:: create([
            'title' => $this-›title,
        ]);

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

<div> 
    <form wire:submit.prevent="add"> 
        <input name="title" wire:model="title" />
        <button type="submit">Dodaj do zrobienia</button>
    </formularz>
</div>

W powyższym kodzie, gdy formularz zostanie przesłany, wywoła $add metodę i utworzy nowe todo w bazie danych i wyczyści tytuł. Całkiem fajne 😎

zasady

walidacji Volt Możesz również bardzo łatwo dodać walidację do swoich komponentów Volt. Oto przykład sprawdzenia, czy zmienna $title nie jest pusta i zawiera co najmniej trzy znaki.

<?php
    użyj App\Models\Todo;
    użyj funkcji Laravel\Volt\{provide, rules, state};
    
state(['title' => '']);

rules(['title' => 'wymagane|min:3']);
    
provide(fn () => [
        'todos' => Todo:: all (),
    ]);

$add = function () {
        Todo:: create([
            'title' => $this-›title,
        ]);

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

<div> 
    <form wire:submit.prevent="add"> 
        <input name="title" wire:model="title" />
        <button type="submit">Dodaj do zrobienia</button>
    </formularz>
    @error ("tytuł")
        <span class="text-red-500">{{ $message }}</span>
    @enderror
</div>

Zobaczysz, że powyżej dodaliśmy nową deklarację {rules}, która daje nam dostęp do metody pomocniczejrules(), co pozwala nam dodać walidację do dowolnego stanu w naszym komponencie wolta.

Wniosek

: Dowiedz się więcej o instalacji i dodatkowych funkcjach, zapoznając się z dokumentacją Volta na stronie https://livewire.laravel.com/docs/volt.

Volt pomoże nam zbudować dynamiczne i interaktywne interfejsy użytkownika bez potrzeby stosowania oddzielnych plików. Volt zapewnia nam kolokację kodu, łącząc zachowanie i znaczniki komponentów w jednym pliku w celu zwiększenia wydajności. Elektryzujące rzeczy ⚡️

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