Was ist Vue.js?
Vue.js (im Folgenden Vue) ist ein progressives JavaScript-Framework zum Aufbau von Benutzeroberflächen. „Progressiv” meint, dass Sie klein beginnen und bei Bedarf Funktionen ergänzen können – von der partiellen Integration in bestehende HTML-Seiten bis zum vollständigen SPA. Der Kern von Vue ist Reaktivität. Bei Datenänderungen aktualisiert sich das DOM automatisch; Sie müssen nicht manuell verwalten, wann welches Element aktualisiert wird.Diese Seite behandelt Vue 3 mit Inertia v3. Die Starterkits von Laravel 13 verwenden diese Konstellation standardmäßig.
Options API und Composition API
Vue 3 bietet zwei Stile: die Options API und die Composition API. Die Options API ist der klassische Stil aus Vue 2. Komponenten werden über Options-Objekte wiedata, methods, computed und mounted beschrieben.
<script setup>-Syntax lässt sich Code besonders knapp schreiben. Auch Wiederverwendbarkeit von Logik und TypeScript-Integration sind sehr gut.
Rolle in Laravel
Historie
Vue und Laravel haben eine lange gemeinsame Geschichte, die mit Laravel 5.3 (2016) und der Einführung von Vue als Standard-Frontend-Framework beginnt. Damals war Vue inpackage.json enthalten, ebenso eine Beispielkomponente resources/js/components/ExampleComponent.vue.
Mit Laravel 6 (2019) wurde das Auth-Scaffold in das Paket laravel/ui ausgelagert; auch das Vue-Scaffold zog in dieses Paket um. Aktueller Standard ist die Inertia-+-Vue-Konfiguration, die über das Starterkit von laravel new gewählt wird.
Für Laravel-Nutzer ist Vue das vertrauteste JS-Framework; auch die Lernressourcen sind reichhaltig.
Aktueller Standard: Inertia × Vue
Der Standard-Ansatz für Vue in Laravel ist Inertia × Vue. Inertia realisiert die „moderne Monolith”-Architektur, bei der Daten aus dem Laravel-Controller direkt an Vue-Komponenten gehen, ohne API-Design.Setup
Via Starterkit (empfohlen)
Für neue Projekte ist das Starterkit am komfortabelsten.inertiajs/inertia-laravel(serverseitiger Adapter)@inertiajs/vue3(Client-Adapter)vue(Vue 3 selbst)@vitejs/plugin-vue(Vite-Plugin)- Middleware
HandleInertiaRequests - Auth-Seiten für Login, Registrierung u. a. (bereits mit Inertia + Vue umgesetzt)
Manuelle Installation
Für die Ergänzung in einem bestehenden Projekt installieren Sie Server- und Client-Seite separat.vite.config.js:
resources/js/app.js.
Details zur manuellen Installation (Root-Template, Middleware-Registrierung usw.) finden Sie in der offiziellen Inertia-Dokumentation.
Verzeichnisstruktur
Im Starterkit werden Vue-Page-Komponenten unterresources/js/pages/ abgelegt.
Inertia::render('Posts/Index', [...]) verweist auf resources/js/pages/Posts/Index.vue.
Vue-Template-Syntax
Die grundlegenden Direktiven, die Sie zum Lesen und Schreiben von Starterkit-Code benötigen:{{ }} – Variablen-Interpolation
Mit doppelten geschweiften Klammern binden Sie JavaScript-Werte und -Ausdrücke ins Template ein.
v-if – Bedingte Anzeige
{#if} in Svelte und dem ternären Operator in React.
v-for – Listen darstellen
:key zwingend. Entspricht Array.map() in React.
v-model – Zwei-Wege-Binding
Mit v-model synchronisieren Sie den Wert eines Formularelements bidirektional mit einer reaktiven Variablen.
: (v-bind) und @ (v-on)
:attr="value"– dynamischen Wert an ein HTML-Attribut binden (Kurzform vonv-bind:attr)@event="handler"– Event-Listener registrieren (Kurzform vonv-on:event)
Grundlagen der Page-Komponente
Eine Inertia-Page-Komponente ist eine gewöhnliche Vue-Komponente. Die aus dem Laravel-Controller übergebenen Daten stehen als Props zur Verfügung.Controller
Vue-Page-Komponente
defineProps() verwenden Sie die vom Controller übergebenen Daten direkt im Template. Eine REST-API ist nicht nötig.
Die Link-Komponente
Die von @inertiajs/vue3 bereitgestellte <Link>-Komponente sorgt für Seitenwechsel per XHR und vermeidet ein Full-Page-Reload.
<a>-Tag; im Hintergrund tauscht Inertia nur die Page-Komponente aus.
Die Form-Komponente
Die <Form>-Komponente von @inertiajs/vue3 ist der empfohlene Stil aus den Starterkit-Auth-Screens. Sie geben action und method als Props an und greifen mit v-slot auf errors und processing zu.
Grundlegende Verwendung
v-slot="{ errors, processing }" ist die Scoped-Slot-Syntax von Vue; die Form-Komponente berechnet diese Werte automatisch und übergibt sie. Statt v-model verwenden Sie das native HTML-name-Attribut, sodass die Formulardatenerfassung des Browsers funktioniert.
Muster aus dem Starterkit
Die Starterkits verwalten Routen mit Wayfinder als Objekte.store.form() liefert ein Objekt mit action und method, das per v-bind an <Form> per Spread übergeben wird.
reset-on-success angegebenen Felder werden bei erfolgreichem Absenden automatisch zurückgesetzt. Nutzen Sie das etwa für Passwortfelder, die nach dem Absenden geleert werden sollen.
Ohne Wayfinder verhalten sich
action="/login" und Co. identisch, sobald Sie die URL direkt übergeben.Der useForm-Helper
Für die Formularverarbeitung nutzen Sie den useForm-Helper aus @inertiajs/vue3. State-Handling, Absenden und Fehleranzeige lassen sich damit schlank umsetzen.
Auf der Controller-Seite
Vue-Formular-Komponente
useForm:
| Eigenschaft / Methode | Beschreibung |
|---|---|
form.data | Datenobjekt des Formulars |
form.errors | Validierungsfehler (Zugriff per Feldname) |
form.processing | true, solange gesendet wird (für Button-Deaktivierung) |
form.isDirty | true, wenn sich der Wert vom Ursprung unterscheidet |
form.post(url) | Per POST senden |
form.put(url) | Per PUT senden (Update) |
form.delete(url) | Per DELETE senden |
form.reset() | Formular auf Initialwerte zurücksetzen |
useForm die Eingaben und zeigt die Fehler an. In Verbindung mit v-model entsteht ein nahtloses Formularerlebnis.
Shared Data
Daten, die auf allen Seiten gemeinsam gebraucht werden (angemeldeter Nutzer, Flash-Messages u. a.), definieren Sie in der Methodeshare() der Middleware HandleInertiaRequests.
usePage() auf Shared Data zu.
Da Shared Data in jeder Anfrage enthalten sind, empfiehlt sich die Beschränkung auf das Nötigste. Eine Lazy-Evaluation per
fn() wird nur ausgewertet, wenn tatsächlich zugegriffen wird.Grundlagen der Reaktivität in Vue 3
Wichtige Reaktivitäts-APIs für Inertia × Vue:ref – primitive reaktive Werte
computed – berechnete Werte
onMounted – Verarbeitung nach dem Mount
Fazit
Vue.js harmoniert hervorragend mit Laravel und entfaltet insbesondere im „modernen Monolithen” mit Inertia seine Stärken.| Baustein | Rolle |
|---|---|
| Laravel-Controller | Routing, Datenerfassung, Validierung |
Inertia::render() | Daten vom Controller an die Vue-Komponente reichen |
| Vue-Page-Komponente | Props empfangen und UI rendern |
useForm | Formular-State, Absenden und Fehleranzeige |
Link-Komponente | Seitenwechsel ohne Full-Reload |
usePage().props | Zugriff auf Shared Data |
Offizielle Inertia.js-Dokumentation
Alle Funktionen von Inertia v3 finden Sie in der offiziellen Dokumentation.