Cos’è Vue.js
Vue.js (di seguito “Vue”) è un framework JavaScript progressivo per costruire interfacce utente. “Progressivo” significa che puoi iniziare da parti piccole e aggiungere funzionalità quando servono: si adatta sia all’inserimento parziale in pagine HTML esistenti sia alla costruzione di SPA di grandi dimensioni. Il cuore di Vue è la reattività. Quando i dati cambiano, il DOM si aggiorna automaticamente, quindi non devi gestire manualmente “quando e quale elemento aggiornare”.In questa pagina spieghiamo la combinazione di Vue 3 e Inertia v3. Lo starter kit di Laravel 13 usa questa configurazione per impostazione predefinita.
Options API e Composition API
Vue 3 offre due stili per scrivere i componenti: Options API e Composition API. Options API è lo stile tradizionale ereditato da Vue 2. Definisci il componente tramite un oggetto opzioni condata, methods, computed, mounted, ecc.
<script setup> puoi scrivere in modo più conciso. Ha una riusabilità della logica maggiore ed è particolarmente adatto a TypeScript.
Posizione in Laravel
Storia
Il rapporto tra Vue e Laravel è di lunga data e inizia con l’adozione di Vue come framework frontend predefinito in Laravel 5.3 (2016). All’epoca Vue era incluso inpackage.json ed era fornito anche il componente d’esempio resources/js/components/ExampleComponent.vue.
Con Laravel 6 (2019) lo scaffold di autenticazione è stato scorporato nel pacchetto laravel/ui e anche lo scaffold Vue è passato a quel pacchetto. Attualmente lo stile principale è scegliere la configurazione Inertia + Vue tramite gli starter kit di laravel new.
Per gli utenti Laravel, Vue è il framework JS più familiare, con risorse di apprendimento in molte lingue.
Stile principale attuale: Inertia × Vue
Il modo principale di usare Vue in Laravel è Inertia × Vue. Inertia realizza l’architettura “monolite moderno” che permette di passare dati dai controller Laravel direttamente ai componenti Vue senza progettare un’API.Setup
Tramite starter kit (consigliato)
Per iniziare un nuovo progetto il modo più semplice è usare lo starter kit.inertiajs/inertia-laravel(adapter lato server)@inertiajs/vue3(adapter lato client)vue(Vue 3)@vitejs/plugin-vue(plugin Vite)- Middleware
HandleInertiaRequests - Schermate di autenticazione (login, registrazione, ecc.) già implementate con Inertia + Vue
Installazione manuale
Per aggiungerlo a un progetto esistente, installa separatamente lato server e lato client.vite.config.js.
resources/js/app.js.
Per i dettagli dell’installazione manuale (configurazione del template root, registrazione dei middleware, ecc.) consulta la documentazione ufficiale di Inertia.
Struttura delle directory
Negli starter kit i componenti pagina Vue vanno nella directoryresources/js/pages/.
Inertia::render('Posts/Index', [...]), il componente corrispondente è resources/js/pages/Posts/Index.vue.
Sintassi dei template Vue
Ecco le direttive di template di base che servono per leggere e scrivere il codice degli starter kit.{{ }} — espansione di variabili
Con le doppie parentesi graffe incorpori valori o espressioni JavaScript nel template.
v-if — condizionali
{#if} di Svelte o all’operatore ternario di React.
v-for — rendering di liste
:key per un aggiornamento differenziale efficiente. Corrisponde a Array.map() di React.
v-model — binding bidirezionale
Con v-model puoi sincronizzare bidirezionalmente il valore di un elemento form e una variabile reattiva.
: (v-bind) e @ (v-on)
:attr="value"— bind di un valore dinamico su un attributo HTML (forma abbreviata div-bind:attr)@event="handler"— registra un listener di evento (forma abbreviata div-on:event)
Le basi del componente pagina
I componenti pagina di Inertia sono normali componenti Vue. I dati passati dal controller Laravel arrivano come props.Controller
Componente pagina Vue
defineProps() per usare nel template i dati passati dal controller. Non serve definire un’API REST.
Componente Link
Usando il componente <Link> di @inertiajs/vue3, le transizioni avvengono via XHR ed eviti il full reload del browser.
<a>, ma dietro le quinte Inertia sostituisce solo il componente di pagina, dando una sensazione da SPA.
Componente Form
Il componente <Form> fornito da @inertiajs/vue3 è lo stile consigliato usato dagli starter kit per l’invio dei form. Specifichi action e method come props e accedi a errors e processing tramite v-slot.
Uso di base
v-slot="{ errors, processing }" è la sintassi di scoped slot di Vue; il componente Form calcola e passa automaticamente questi valori. Ai campi si assegna l’attributo HTML nativo name invece di v-model, così funziona la raccolta standard dei dati del browser.
Pattern degli starter kit
Gli starter kit gestiscono le rotte come oggetti tramite Wayfinder.store.form() restituisce un oggetto contenente action e method dell’oggetto rotta e viene passato a <Form> con v-bind.
reset-on-success vengono ripristinati automaticamente in caso di invio riuscito. Utile per campi come la password che vuoi svuotare dopo l’invio.
Se non usi Wayfinder puoi passare direttamente l’URL come
action="/login" e funziona allo stesso modo.Helper useForm
Per la gestione dei form usa l’helper useForm di @inertiajs/vue3. Puoi implementare in modo semplice gestione stato, invio ed errori di validazione.
Lato controller
Componente form Vue
useForm.
| Proprietà / Metodo | Descrizione |
|---|---|
form.data | Oggetto dati del form |
form.errors | Errori di validazione (accesso per nome campo) |
form.processing | true durante l’invio (per disabilitare il pulsante) |
form.isDirty | true se ci sono modifiche rispetto ai valori iniziali |
form.post(url) | Invia con richiesta POST |
form.put(url) | Invia con richiesta PUT (update) |
form.delete(url) | Invia con richiesta DELETE |
form.reset() | Ripristina il form ai valori iniziali |
useForm mantiene i contenuti inseriti mostrando gli errori. In combinazione con v-model offre un’esperienza di form senza interruzioni.
Dati condivisi (Shared Data)
I dati necessari a tutte le pagine (utente loggato, messaggi flash, ecc.) si definiscono nel metodoshare() del middleware HandleInertiaRequests.
usePage().
Poiché i dati condivisi sono inclusi in ogni richiesta, si consiglia di limitarli allo stretto necessario. Con valutazioni lazy tramite
fn(), vengono valutati solo quando ci si accede davvero.Basi della reattività di Vue 3
Ecco le API di reattività di Vue 3 essenziali per sviluppare con Inertia × Vue.ref — valore reattivo primitivo
computed — proprietà calcolate
onMounted — elaborazioni dopo il mount
Conclusioni
Vue.js ha una grande affinità con Laravel e dà il meglio nell’architettura “monolite moderno” tramite Inertia.| Elemento | Ruolo |
|---|---|
| Controller Laravel | Routing, recupero dati e validazione |
Inertia::render() | Passa i dati dal controller al componente Vue |
| Componente pagina Vue | Riceve le props e renderizza la UI |
useForm | Gestione stato, invio ed errori del form |
Componente Link | Transizioni di pagina senza full reload |
usePage().props | Accesso ai dati condivisi |
Documentazione ufficiale di Inertia.js
Per tutte le funzionalità di Inertia v3 consulta la documentazione ufficiale.