Plugin Filament Outils dev v1.1.1

Filament Dependency Graph

Explorez visuellement l’architecture d’une application Laravel et Filament : modèles, relations Eloquent, composants Livewire, ressources et panels réunis dans un graphe interactif.

Filament Dependency Graph

Compatibilité

PHP ^8.3
Laravel ^12.0|^13.0
Filament ^4.0|^5.0
Version v1.1.1
Licence MIT

Installation

composer require laboiteacode/filament-dependency-graph

Présentation

Comprendre une application Laravel importante oblige souvent à ouvrir des dizaines de modèles, ressources Filament et composants Livewire avant de percevoir comment l’ensemble s’articule. Les diagrammes écrits à la main vieillissent, tandis que l’architecture réelle continue d’évoluer. Filament Dependency Graph construit cette carte directement depuis le code de l’application.

Une seule page réunit les modèles Eloquent, leurs relations, les composants Livewire, les ressources, les pages et les panels Filament. L’exploration se fait dans un graphe interactif, un arbre ou des tables natives Filament. La recherche, les filtres et le mode focus permettent ensuite de passer d’une vue d’ensemble au voisinage exact d’un modèle.

Une documentation qui suit le code

Le plugin découvre automatiquement les relations Eloquent, y compris les relations polymorphiques et les morph maps. Il repère aussi les modèles utilisés par les composants Livewire sans les instancier : propriétés typées, signatures de méthodes et références statiques explicites sont analysées en lecture seule.

Le résultat répond rapidement aux questions qui ralentissent une reprise de projet :

  • quels modèles sont exposés par une ressource Filament ;
  • quels composants Livewire dépendent d’un modèle ;
  • dans quels panels une ressource est enregistrée ;
  • où se trouvent les cycles, les modèles isolés et les dépendances orphelines ;
  • quel chemin relie deux éléments de l’application.

Plusieurs lectures du même graphe

Le graphe privilégie la navigation visuelle, avec une disposition hiérarchique ou libre. L’arbre rend les dépendances faciles à parcourir. Les tables offrent recherche, tri et pagination par type d’élément. Un inspecteur latéral détaille enfin la classe, la table, les relations, les casts, les traits, les ressources et les diagnostics de découverte.

Les exports JSON et Mermaid sont déterministes : à architecture identique, le fichier produit reste identique. Ils peuvent ainsi être versionnés dans la documentation ou comparés en intégration continue pour repérer une dérive.

Conçu comme un outil d’architecture

La découverte est mise en cache et peut être préparée pendant un déploiement. Les erreurs de métadonnées sont isolées par modèle afin qu’une classe atypique — y compris un modèle sans clé primaire — n’empêche pas d’explorer le reste de l’application.

Les noms de classes, de tables et de relations sont sensibles. La page est donc limitée à l’environnement local par défaut. L’ouvrir ailleurs demande de fournir explicitement une règle d’autorisation.

Le plugin est open source, distribué sous licence MIT, compatible avec Filament 4 et 5, et livré en français et en anglais.

Documentation

Installation

Installez le package avec Composer :

composer require laboiteacode/filament-dependency-graph

Enregistrez le plugin dans le provider du panel :

use LaBoiteACode\DependencyGraph\DependencyGraphPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            DependencyGraphPlugin::make(),
        ]);
}

La page est alors disponible sur /admin/dependency-graph dans l’environnement local. Le plugin peut être enregistré sur plusieurs panels, avec une configuration propre à chacun.

Après une installation ou une mise à jour en production, republiez les assets Filament :

php artisan filament:assets

Espace visuel

Graphe

Le graphe propose une disposition hiérarchique pour lire les dépendances de haut en bas et une disposition libre pour explorer des ensembles plus denses. La sélection d’un nœud atténue le reste du graphe et ouvre son inspecteur.

Arbre et tables

L’arbre organise les dépendances sous forme de branches repliables. Les tables utilisent les composants natifs Filament et séparent modèles, composants Livewire, ressources et autres éléments ; elles sont recherchables, triables et paginées.

Inspecteur et mode focus

L’inspecteur affiche les métadonnées utiles de l’élément sélectionné. Le mode focus restreint le graphe à ses voisins, avec une profondeur et une direction configurables. Son état est conservé dans l’URL afin de partager ou mettre en favori une vue précise.

Filtres et raccourcis

Deux portées sont disponibles :

  • Filament, centrée sur les ressources enregistrées dans les panels sélectionnés ;
  • Laravel, qui ajoute tous les modèles découverts et les composants Livewire autonomes.

Les filtres portent notamment sur le panel, le type de nœud, le type de relation, le namespace, l’appartenance au projet et les orphelins.

Touche Action
/ Placer le curseur dans la recherche
F Focaliser sur le nœud sélectionné
Esc Fermer l’inspecteur ou quitter le focus
R Réinitialiser le graphe
G, T, L Afficher le graphe, l’arbre ou les tables
E Exporter en JSON

Exports

La barre d’outils exporte la vue courante, filtres compris, en JSON ou Mermaid. La même opération est disponible en ligne de commande :

php artisan filament-dependency-graph:export \
    --format=mermaid \
    --scope=laravel \
    --output=docs/dependency-graph.mmd

Les options permettent de choisir les panels, un nœud de focus, la profondeur et la direction. Ajoutez --force pour remplacer un fichier existant.

L’API est également accessible par la façade :

use LaBoiteACode\DependencyGraph\Facades\DependencyGraph;

$snapshot = DependencyGraph::discover();
$graph = DependencyGraph::graph();

$graph->nodeCount();
$graph->edgeCount();

Cache

La réflexion et le parcours des fichiers sont mis en cache sous forme de snapshot :

# Préparer le cache, par exemple pendant le déploiement
php artisan filament-dependency-graph:cache --scope=laravel

# Supprimer tous les snapshots
php artisan filament-dependency-graph:clear

La clé tient compte de la version du schéma interne, des versions d’exécution et de chaque réglage de découverte. Un changement de configuration ne peut donc pas servir un ancien graphe.

Configuration

Publiez la configuration pour personnaliser la navigation, les chemins inspectés, les filtres ou le cache :

php artisan vendor:publish --tag=filament-dependency-graph-config

Les mêmes réglages principaux existent sous forme d’API fluide :

use LaBoiteACode\DependencyGraph\Domain\Enums\GraphScope;

DependencyGraphPlugin::make()
    ->defaultScope(GraphScope::Filament)
    ->defaultDepth(2)
    ->allowLaravelScope()
    ->registerModelPath(app_path('Domain'))
    ->registerModelNamespace('App\\Domain\\')
    ->registerLivewirePath(app_path('Domain/Livewire'))
    ->registerLivewireNamespace('App\\Domain\\Livewire\\')
    ->excludeModels([AuditLog::class]);

La découverte heuristique des relations non typées est désactivée par défaut, car appeler une méthode arbitraire peut produire des effets de bord. Un type de retour ou un docblock reste la méthode la plus sûre pour rendre une relation détectable.

Sécurité

La page révèle des informations d’architecture. Elle n’est accessible par défaut que lorsque app()->isLocal() renvoie true.

Pour l’activer dans un autre environnement, fournissez une autorisation explicite et stricte :

DependencyGraphPlugin::make()
    ->canAccessUsing(
        fn (): bool => auth()->user()?->can('viewDependencyGraph') === true,
    );

Cette callback remplace entièrement la règle « local uniquement ».

Traductions

Les traductions anglaises et françaises sont incluses. Les vues et traductions peuvent être publiées si l’application doit adapter les libellés ou le rendu :

php artisan vendor:publish --tag=filament-dependency-graph-translations
php artisan vendor:publish --tag=filament-dependency-graph-views
À découvrir aussi

D'autres packages