Skip to main content
Laravel Livewire
Mateusz Lencki
Programista PHP w Blumilk
mateusz.lencki@blumilk.pl
Laravel Livewire - co to jest?
Według dokumentacji:
“Livewire is a full-stack framework for Laravel that
makes building dynamic interfaces simple, without
leaving the comfort of Laravel.”
Livewire - dynamiczny frontend bez JS
Jak to działa?
Livewire API
Dziwne? Głupie? Ale inni też tak robią!
Instalacja Composerem
Dodawanie JS i CSS do layoutu głównego
Komponenty
Komponenty - na co się składają?
Dane i zachowania
Klasy PHP
Wygląd
Szablony Blade
Tworzenie komponentu
Tworzenie komponentu
Tworzenie komponentu
Routing
Renderowanie komponentu
Znaczniki:
Dyrektywy Blade:
Properties
czyli
dane komponentu
Properties
Properties
Uwaga!
Uwaga!
Nazwy zdefiniowanych pól komponentu nie mogą
kolidować z nazwami zastrzeżonymi dla Livewire
($rules, $messages…)
Uwaga!
Dane przechowywane w polach o modyfikatorze dostępu
public są widoczne w podglądzie źródła strony.
Nie powinno się w nich przechowywać danych
wrażliwych.
Uwaga!
Pola o modyfikatorze public muszą być Javascript-
Friendly.
Mogą mieć tylko i wyłącznie następujące typy:
Stringable
Collection
DateTime
Model
EloquentCollection
Uwaga!
Pola z modyfikatorami dostępu protected i private nie
utrzymują swego stanu pomiędzy aktualizacjami stanu
komponentu.
Nie powinny być one wykorzystywane do
przechowywania stanu komponentu.
Data binding
Data binding
Debouncing input
Data binding
Lazy updating
Data binding
Deferred updating
Computed properties
Actions
czyli
zachowanie komponentu
Actions
Actions
Events
czyli
komunikacja komponentów
Events
Komponenty Livewire mogą komunikować się ze sobą za
pomocą globalnego systemu zdarzeń.
Tak długo jak komponenty znajdują się na tej samej
stronie, tak długo będą one w stanie się ze sobą
komunikować za pomocą eventów i listenerów.
Wyzwalanie zdarzeń
Z poziomu szablonu:
Z poziomu obiektu komponentu:
Nasłuchiwanie zdarzeń
Scoping events
Do komponentu “rodzica”:
Do konkretnego komponentu:
Scoping events
Do samego siebie:
Cykl życia komponentu
Lifecycle Hooks
Zagnieżdżanie komponentów
Walidacja formularzy
Usprawnienia UI
Loading states
Usprawnienia UI
Polling
Usprawnienia UI
Offline state
Usprawnienia UI
Dirty states
Integracja z Javascript
Alpine.js
Alpine.js
Alpine.js
Alpine.js - instalacja
CDN:
NPM:
Inline scripts
Inline scripts
Testowanie
Przemyślenia na koniec
Przemyślenia
● Pomocne, gdy nie mamy chęci, czasu, pieniędzy na korzystanie z
bardziej zaawansowanego frontendu w JS
Przemyślenia
● Pomocne, gdy nie mamy chęci, czasu, pieniędzy na korzystanie z
bardziej zaawansowanego frontendu w JS
● Trzeba uważać na “stanowe”/bezstanowe komponenty
Przemyślenia
● Pomocne, gdy nie mamy chęci, czasu, pieniędzy na korzystanie z
bardziej zaawansowanego frontendu w JS
● Trzeba uważać na “stanowe”/bezstanowe komponenty
● Nieumiejętnie wykorzystany może powodować problemy z
wydajnością
Przemyślenia
● Pomocne, gdy nie mamy chęci, czasu, pieniędzy na korzystanie z
bardziej zaawansowanego frontendu w JS
● Trzeba uważać na “stanowe”/bezstanowe komponenty
● Nieumiejętnie wykorzystany może powodować problemy z
wydajnością
● Może powodować nadmiarowe sprzężenia logiki biznesowej z
warstwą prezentacji
Przemyślenia
● Pomocne, gdy nie mamy chęci, czasu, pieniędzy na korzystanie z
bardziej zaawansowanego frontendu w JS
● Trzeba uważać na “stanowe”/bezstanowe komponenty
● Nieumiejętnie wykorzystany może powodować problemy z
wydajnością
● Może powodować nadmiarowe sprzężenia logiki biznesowej z
warstwą prezentacji
● A może Inertia.js?
Pytania?
mateusz.lencki@blumilk.pl
Mateusz Lencki