Laravel Nova : custom fields et tools (aller au-delà du CRUD)
Ressources, champs, filtres, recherche et policies : Nova couvre déjà 90 % des besoins d’un back-office. Pour le reste — un champ de statut plus joli, un changement de statut en un clic depuis l’index, une page devis / factures sur mesure — on passe au custom.
Nova permet de créer vos propres fields, filters, metrics… et surtout des tools : des pages complètes dans le panneau d’admin, avec routes, Vue et appels AJAX via l’API Nova.
Quand le CRUD standard ne suffit plus
Jusqu’ici dans la playlist, on a vu l’essentiel pour un back-office complet :
Nova propose déjà beaucoup de fields prêts à l’emploi — et c’est très bien. Mais parfois le besoin est plus spécifique : un affichage de statut plus clair, une édition rapide depuis l’index, une page métier entière (devis, factures…).
La documentation Nova le prévoit : vous pouvez créer vos propres fields, filters, metrics et tools.
Références : Custom Fields · Tools.
Custom fields : php artisan nova:field
Générer le package
php artisan nova:field vendor/nom-du-champ
Nova crée un dossier dans nova-components/ : service provider, classe PHP du field, assets JS/CSS, et le scaffolding Vue.
Vous obtenez :
- une classe PHP (logique, meta, options) ;
- des composants Vue pour chaque contexte d’affichage.
Trois (voire quatre) composants Vue
Le nom du composant est préfixé selon la vue :
| Préfixe | Fichier | Contexte |
|---|---|---|
index-… |
IndexField.vue |
Liste (index) |
detail-… |
DetailField.vue |
Page détail |
form-… |
FormField.vue |
Création / édition |
preview-… |
PreviewField.vue |
Aperçu (optionnel) |
Ces composants sont enregistrés dans resources/js/field.js du package, par exemple :
Nova.booting((app, store) => {
app.component('index-order-status', IndexField)
app.component('detail-order-status', DetailField)
app.component('form-order-status', FormField)
})
Démo : champ statut
Exemple simple vu en vidéo : un field de statut plus joli qu’un select / texte brut — badges, couleurs, lecture claire sur index, détail et formulaire.
Cas client fréquent : changer le statut depuis l’index (un clic, un select) sans ouvrir l’édition puis sauvegarder. Avec un custom field, vous avez accès à vos routes et contrôleurs : un peu d’AJAX côté Nova, et c’est réglé.
Custom tools : pages complètes dans Nova
Un field personnalise un champ. Un tool va plus loin : toute une zone / page du back-office.
php artisan nova:tool vendor/nom-du-tool
Le package généré est plus costaud :
- service provider (enregistrement plus riche qu’un simple field) ;
- routes (classiques et/ou Inertia) ;
- un point d’entrée JS qui charge un composant Vue (
Tool.vue, etc.).
Pour les appels AJAX, Nova propose son propre client (pas forcément fetch / Axios bruts) — cohérent avec le reste de l’admin.
Exemple réel : devis et factures
Sur un gros projet client, les fields natifs ne couvraient pas un workflow devis / factures (choix client, lignes, totaux, PDF…). Solution :
- un custom field pour la vue / édition d’une facture ;
- un tool pour piloter tout le module sur mesure.
Nova reste le cadre ; vous codez le métier.
Récap : quoi customiser ?
| Besoin | Approche Nova |
|---|---|
| Affichage / saisie d’un attribut | Custom field |
| Filtre métier non couvert | Custom filter |
| Carte / graphique spécifique | Custom metric |
| Page ou module entier | Custom tool |
Pour 90 % des projets, le standard suffit. Pour le sur-mesure, le scaffolding Artisan + Vue vous laisse la main sans quitter Nova.
Vidéo : fields et tools en pratique
FAQ rapide (SEO & technique)
Comment créer un custom field Nova ?
php artisan nova:field vendor/package — package dans nova-components/ avec PHP + Vue.
Quels composants Vue pour un field ?
Index, détail, formulaire (et preview optionnel), préfixés index-, detail-, form-.
Différence field / tool ?
Field = un champ dans une ressource. Tool = page / module complet dans Nova.
Peut-on faire de l’AJAX dans un field ou un tool ?
Oui — routes + contrôleurs, avec le client HTTP Nova côté front.
Faut-il tout customiser ?
Non — le natif couvre la majorité des cas ; le custom pour le spécifique métier.
Conclusion
Nova ne s’arrête pas au CRUD généré : fields, filters, metrics et tools custom permettent d’aller aussi loin que le besoin client — sans abandonner le panneau officiel Laravel.
Suite de la série : la communauté Nova a aussi publié beaucoup de champs et de packages réutilisables — on les découvre dans la prochaine (et dernière) vidéo de cette playlist découverte.
Abonnez-vous à la chaîne YouTube pour être notifié.