Drag

Laravel Nova : custom fields et tools (aller au-delà du CRUD)

Laravel Nova : custom fields et tools (partie 8)

Écrit par : Thibault Chazottes

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é.