Qu’est-ce que Vue.js ?
Vue.js (ci-après Vue) est un framework JavaScript progressif pour construire des interfaces utilisateur. « Progressif » signifie que vous pouvez commencer petit et ajouter des fonctionnalités selon vos besoins ; il peut s’intégrer partiellement dans une page HTML existante ou servir à la construction de SPA à grande échelle. L’essence de Vue est la réactivité. Lorsque les données changent, le DOM est automatiquement mis à jour ; le développeur n’a donc pas à gérer manuellement « quand et quels éléments mettre à jour ».Cette page présente la combinaison Vue 3 et Inertia v3. Le starter kit de Laravel 13 utilise cette configuration par défaut.
Options API et Composition API
Vue 3 propose deux styles d’écriture de composants : Options API et Composition API. Options API est le style traditionnel hérité de Vue 2. Vous définissez un composant avec un objet d’options :data, methods, computed, mounted, etc.
<script setup>, il permet une écriture plus concise. Il offre également une meilleure réutilisation logique et une excellente affinité avec TypeScript.
Position dans Laravel
Histoire
La relation entre Vue et Laravel est ancienne, remontant à Laravel 5.3 (2016), lorsque Vue a été adopté comme framework front-end par défaut. À l’époque,package.json incluait Vue, et un composant d’exemple resources/js/components/ExampleComponent.vue était fourni.
Dans Laravel 6 (2019), le scaffold d’authentification a été extrait dans le paquet laravel/ui, et le scaffold Vue a également migré vers ce paquet. Aujourd’hui, le style principal consiste à choisir la configuration Inertia + Vue via un starter kit avec laravel new.
Pour les utilisateurs de Laravel, Vue est le framework JS le plus familier, et les ressources d’apprentissage en français sont abondantes.
Le style principal actuel : Inertia × Vue
L’utilisation centrale de Vue dans Laravel aujourd’hui est Inertia × Vue. Inertia permet une architecture « monolithe moderne » où l’on peut passer directement des données du contrôleur Laravel aux composants Vue sans concevoir d’API.Installation
Via un starter kit (recommandé)
Pour démarrer un nouveau projet, utiliser un starter kit est le moyen le plus simple.inertiajs/inertia-laravel(adaptateur côté serveur)@inertiajs/vue3(adaptateur côté client)vue(Vue 3 lui-même)@vitejs/plugin-vue(plugin Vite)- Middleware
HandleInertiaRequests - Écrans d’authentification (connexion, inscription, etc.) déjà implémentés en Inertia + Vue
Installation manuelle
Pour ajouter à un projet existant, installez séparément les parties serveur et client.vite.config.js.
resources/js/app.js.
Pour les détails de l’installation manuelle (configuration du template racine, enregistrement du middleware, etc.), consultez la documentation officielle d’Inertia.
Structure des répertoires
Dans les starter kits, les composants de page Vue sont placés dans le répertoireresources/js/pages/.
Inertia::render('Posts/Index', [...]), le composant correspondant est resources/js/pages/Posts/Index.vue.
Syntaxe des templates Vue
Voici les directives de template de base nécessaires pour lire et écrire le code d’un starter kit.{{ }} — interpolation de variables
Utilisez les doubles accolades pour intégrer des valeurs ou expressions JavaScript dans le template.
v-if — branchement conditionnel
{#if} de Svelte ou à l’opérateur ternaire de React.
v-for — rendu de listes
:key. Équivalent à Array.map() de React.
v-model — liaison bidirectionnelle
Avec v-model, vous pouvez synchroniser en bidirectionnel la valeur d’un élément de formulaire et une variable réactive.
: (v-bind) et @ (v-on)
:attr="value"— liaison d’une valeur dynamique à un attribut HTML (forme abrégée dev-bind:attr)@event="handler"— enregistrement d’un écouteur d’événement (forme abrégée dev-on:event)
Bases des composants de page
Les composants de page Inertia sont de simples composants Vue. Les données passées depuis les contrôleurs Laravel sont reçues comme props.Contrôleur
Composant de page Vue
defineProps() pour utiliser dans le template les données passées par le contrôleur. Aucune API REST n’a besoin d’être définie.
Composant Link
Grâce au composant <Link> fourni par @inertiajs/vue3, les transitions de page se font via XHR, évitant un rechargement complet du navigateur.
<a> classique, mais en coulisses, Inertia ne remplace que le composant de page, offrant une expérience proche d’une SPA.
Composant Form
Le composant <Form> fourni par @inertiajs/vue3 est le style recommandé pour la soumission de formulaires, utilisé dans les écrans d’authentification des starter kits. On spécifie action et method en props et on accède à errors et processing avec v-slot.
Utilisation de base
v-slot="{ errors, processing }" correspond à la syntaxe des slots scoped de Vue ; le composant Form calcule et transmet automatiquement ces valeurs. Pour les champs de formulaire, on utilise l’attribut natif HTML name au lieu de v-model, permettant le fonctionnement de la collecte standard des données du navigateur.
Modèle du starter kit
Le starter kit utilise Wayfinder pour gérer les routes sous forme d’objets.store.form() retourne un objet contenant action et method de l’objet route, et vous le passez à <Form> par spread avec v-bind.
reset-on-success sont automatiquement réinitialisés lorsque la soumission réussit. Utilisez-le pour les champs que vous souhaitez vider après l’envoi, comme les champs de mot de passe.
Si vous n’utilisez pas Wayfinder, passer directement l’URL comme
action="/login" fonctionne de la même manière.Helper useForm
Pour le traitement des formulaires, utilisez le helper useForm de @inertiajs/vue3. La gestion de l’état, la soumission et l’affichage des erreurs de validation s’implémentent simplement.
Côté contrôleur
Composant de formulaire Vue
useForm.
| Propriété / méthode | Description |
|---|---|
form.data | Objet de données du formulaire |
form.errors | Erreurs de validation (accessibles par nom de champ) |
form.processing | true pendant l’envoi (à utiliser pour désactiver le bouton) |
form.isDirty | true si modifié par rapport à la valeur initiale |
form.post(url) | Envoi via une requête POST |
form.put(url) | Envoi via une requête PUT (mise à jour) |
form.delete(url) | Envoi via une requête DELETE |
form.reset() | Réinitialise le formulaire à sa valeur initiale |
useForm affiche les erreurs tout en conservant le contenu saisi. Combiné à v-model, cela offre une expérience de formulaire fluide.
Données partagées (Shared Data)
Les données communes à toutes les pages (informations utilisateur connectées, messages flash, etc.) sont définies via la méthodeshare() du middleware HandleInertiaRequests.
usePage().
Les données partagées sont incluses dans chaque requête ; il est donc recommandé de les limiter au strict nécessaire. En les enveloppant dans une évaluation paresseuse avec
fn(), elles ne sont évaluées que lorsqu’elles sont réellement consultées.Bases de la réactivité de Vue 3
Voici les API de réactivité de Vue 3 à connaître pour développer avec Inertia × Vue.ref — valeur réactive primitive
computed — propriété calculée
onMounted — traitement après montage
Résumé
Vue.js s’accorde bien avec Laravel, et sa force s’exprime tout particulièrement dans une configuration « monolithe moderne » via Inertia.| Élément | Rôle |
|---|---|
| Contrôleur Laravel | Routage, récupération de données, validation |
Inertia::render() | Passe des données du contrôleur au composant Vue |
| Composant de page Vue | Reçoit les props et rend l’UI |
useForm | Gestion d’état, soumission, affichage des erreurs |
Composant Link | Transition de page sans rechargement complet |
usePage().props | Accès aux données partagées |
Documentation officielle d'Inertia.js
Pour toutes les fonctionnalités d’Inertia v3, consultez la documentation officielle.