Was ist Livewire?
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.
Überblick über die Funktionsweise
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.Installation
Führen Sie im Root-Verzeichnis Ihrer Laravel-Anwendung folgenden Befehl aus:Layout-Datei erzeugen
Wenn Sie Livewire als Full-Page-Komponente verwenden, wird eine Layout-Datei benötigt. Diese generieren Sie mit folgendem Artisan-Kommando:resources/views/layouts/app.blade.php erzeugt.
@livewireStyles und @livewireScripts laden die Assets von Livewire und Alpine.js automatisch.
Die erste Komponente
Für das Erzeugen von Livewire-Komponenten gibt es ein eigenes Artisan-Kommando. Bauen wir einen einfachen Counter.resources/views/components/⚡counter.blade.php.
Bearbeiten Sie die generierte Datei wie folgt:
wire:click ruft anstelle von JavaScript eine PHP-Methode auf.
Properties und Actions
Properties – wire:model
Mit der Direktive wire:model binden Sie ein Eingabe-Element bidirektional an eine Property der Komponente.
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.
Actions – wire:click, wire:submit
wire:click bindet eine Methode an ein Click-Event, wire:submit an das Submit-Event eines Formulars.
Echtzeit-Validierung
In Livewire 4 lassen sich Validierungsregeln direkt an Properties über das Attribut#[Validate] definieren.
#[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].Lifecycle-Hooks
Livewire-Komponenten kennen mehrere Lifecycle-Hooks.mount() – Initialisierung
mount() wird für die Initialisierung der Komponente genutzt. Es ersetzt den Konstruktor.
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.
Integration mit Laravel
Nutzung von Eloquent-Modellen
Livewire kann Eloquent-Modelle direkt als Property halten.Form-Objekte
Komplexe Formulare können in Form-Objekte ausgelagert werden, damit Komponenten schlank bleiben.Fazit
Anwendungsfälle, für die Livewire besonders geeignet ist:
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.