⚡ Einführung in Livewire 4 – Reaktive UIs ohne JavaScript
Wie Sie mit dem offiziellen Laravel-Paket Livewire 4 interaktive UIs bauen, ohne JavaScript zu schreiben – von der Installation bis zu praxisnahen Codebeispielen.
Wollte man in Laravel eine dynamische UI bauen, blieb früher nur die Kombination mit einem JavaScript-Framework wie Vue.js oder React – oder man schrieb selbst AJAX-Requests.Livewire ist das Laravel-Paket, das dieses Problem löst. Reaktive UIs lassen sich allein mit PHP und Blade bauen. Funktionen wie Formular-Validierung in Echtzeit, Live-Suche oder Counter, die früher JavaScript benötigten, lassen sich vollständig in PHP umsetzen.
Livewire 4 läuft ab Laravel 10 und ab PHP 8.1. Die aktuelle Version ist Livewire 4.
Eine Livewire-Komponente ist eine Kombination aus einer serverseitigen PHP-Klasse und einem Blade-Template. Wenn der Nutzer auf einen Button klickt oder in ein Formular tippt, sendet Livewire im Hintergrund einen AJAX-Request, führt PHP aus und aktualisiert nur die geänderten Teile der Seite. Entwickler müssen sich um diesen Mechanismus nicht kümmern und schreiben ausschließlich PHP.
Für das Erzeugen von Livewire-Komponenten gibt es ein eigenes Artisan-Kommando. Bauen wir einen einfachen Counter.
php artisan make:livewire Counter
Dieses Kommando erzeugt eine Single-File-Komponente unter resources/views/components/⚡counter.blade.php.
Das ⚡ im Dateinamen dient der raschen Erkennung von Livewire-Komponenten und verbessert die Übersichtlichkeit im Editor. Wenn Sie es nicht möchten, lässt es sich per Konfiguration deaktivieren.
Bearbeiten Sie die generierte Datei wie folgt:
<?phpuse Livewire\Component;new class extends Component { public int $count = 0; public function increment(): void { $this->count++; } public function decrement(): void { $this->count--; }};?><div> <h1>Zähler: {{ $count }}</h1> <button wire:click="increment">+1</button> <button wire:click="decrement">-1</button></div>
Um diese Komponente in ein Blade-Template einzubetten, verwenden Sie die reguläre Blade-Component-Syntax:
<livewire:counter />
Bei jedem Klick auf einen Button wird der Zähler ohne Seiten-Reload aktualisiert. wire:click ruft anstelle von JavaScript eine PHP-Methode auf.
Standardmäßig synchronisiert wire:model erst dann mit dem Server, wenn eine Action ausgeführt wird (etwa das Absenden des Formulars). Wenn Sie bei jeder Eingabe synchronisieren möchten, ergänzen Sie den Modifier .live.
Schreibweise
Verhalten
wire:model
Synchronisation nur bei Ausführung einer Action (z. B. Formular-Submit) (Default)
wire:model.live
Bei jeder Eingabe wird ein Request gesendet
wire:model.blur
Beim Verlassen des Fokus synchronisieren (kein Request)
Bei Properties mit #[Validate] läuft bei jeder Änderung automatisch die Validierung. In Kombination mit wire:model.live.blur erhalten Sie eine Echtzeit-Validierung, bei der die Fehlermeldung genau im Moment des Fokusverlusts angezeigt wird.
$this->validate() prüft beim Absenden alle Properties gemeinsam. Die empfohlene Vorgehensweise ist die zweistufige Kombination mit der automatischen Validierung per #[Validate].
updated() – Verarbeitung nach der Property-Änderung
Wenn Sie nach der Aktualisierung einer Property eingreifen möchten, verwenden Sie updated(). Um eine bestimmte Property zu adressieren, hängen Sie deren Namen an den Methodennamen an.
<?phpuse Livewire\Component;new class extends Component { public string $username = ''; public function updatedUsername(): void { $this->username = strtolower($this->username); }};?><div> <input type="text" wire:model.live="username"> <p>Benutzername: {{ $username }}</p></div>
Bei jeder Eingabe wird automatisch in Kleinbuchstaben umgewandelt.
Anwendungsfälle, für die Livewire besonders geeignet ist:
Anwendungsfall
Was Livewire ermöglicht
Formularverarbeitung
Echtzeit-Validierung, Fehlerdarstellung
Datenlisten
Live-Suche, Sortierung, Pagination
Counter und Toggles
UI-Aktualisierung ohne Seiten-Reload
Admin-Panels
CRUD-Operationen mit direkter Eloquent-Anbindung
Wizard-Formulare
Schrittsteuerung in PHP
Livewire ist für Laravel-Entwickler, die Blade bereits einmal verwendet haben, sofort einsatzbereit. Der größte Vorteil ist, dass sich interaktive UIs ohne die Lernkurve eines JavaScript-Frameworks umsetzen lassen.Für Szenarien mit SPA-nahen, hochkomplexen Interaktionen eignet sich Inertia.js besser; für Formulare, Admin-Panels oder Data Tables ist Livewire jedoch häufig einfacher umzusetzen. Beginnen Sie am besten mit einer kleinen Komponente.
Offizielle Livewire-Dokumentation
Alle Funktionen (Datei-Uploads, Pagination, Testen usw.) finden Sie in der offiziellen Dokumentation.