phil/references-bundle
alphaSachez où chaque ressource est utilisée, et refusez d'en supprimer une dont quelque chose a encore besoin.
phil/references-bundle indique à une application Symfony où ses ressources sont utilisées. Un ReferenceCollector
qu'écrit l'application trouve les liens d'un genre de source, comme une image dans les blocs JSON d'une page ou une
association polymorphe. Le bundle garde ces liens dans une table, à jour à chaque flush de Doctrine. Supprimer une
ressource encore utilisée annule le flush avec un StillReferenced qui nomme les sources qui l'utilisent.
phil:references:check liste les liens vers des ressources disparues, et échoue tant qu'il en reste un.
Il couvre les liens qu'une clé étrangère ne peut pas contenir : une référence dans une colonne JSON, ou un genre et un
identifiant côte à côte. Il s'adresse à une application dont les rédacteurs bâtissent des pages à partir de blocs et de
médias, et doivent voir où paraît une image avant de la retirer. Appeler References::assertUnused() avant une
suppression donne un message clair à la personne ; l'écouteur du flush est le filet de sécurité derrière.
Le bundle enregistre sa table par Doctrine DBAL et écoute les flush de Doctrine ORM. Les ressources sont nommées par
phil/resource : des sources et des cibles de tout genre partagent ainsi une seule table. La conception repose sur deux
ports que remplit l'application : les collecteurs disent vers quoi pointe une source, et un ReferenceTarget dit si une
ressource de son genre existe encore. Un genre sans cible ne voit jamais une suppression refusée ni ses liens rompus
vérifiés.
État
| Partie | État |
|---|---|
Usage, le port du dépôt ; ResourceReference de phil/resource | Implémenté et testé |
References : rafraîchir, oublier, usages, vérification avant suppression, liens rompus ; ReferenceCollector, ReferenceTarget, Link | Implémenté et testé |
DbalUsageRepository, sa table et son écouteur de schéma | Implémenté et testé |
ReferenceTrackingListener : usages à chaque flush, suppression refusée | Implémenté et testé |
phil:references:check | Implémenté et testé |
Documentation
| Document | Contenu |
|---|---|
| Installation | Prérequis, enregistrement, configuration, la table. |
| Collecteurs et cibles | Écrire un collecteur et une cible ; ce que fait le flush. |
| Usages | « Où est-ce utilisé », refuser une suppression, liens rompus. |
| Points d'extension | Ce que l'application implémente, configure, remplace ou utilise. |
| Tests | Comment le bundle est testé. |
| Référence | Chaque type du bundle. |
Démarrage rapide
$references->usagesOf(ResourceReference::of('image', $image->id)); // where is it used?
$references->assertUnused(ResourceReference::of('image', $image->id)); // StillReferenced when it is
bin/console phil:references:check
Prérequis
PHP 8.5 ou plus récent ; Doctrine DBAL 4.5 et ORM 3.7 ; l'injection de dépendances et la configuration de
Symfony 8.2 ; phil/resource 0.1 pour les références aux ressources. Symfony Console est facultatif.
Contribuer
Les contributions sont les bienvenues sur le monodépôt PHIL : lisez le guide de contribution et le code de conduite. Signalez une vulnérabilité en privé, comme l'explique la politique de sécurité, jamais dans un ticket public.
Licence
MIT, © Philippe Gamache, doing business as Le Gnome Archiviste; a Parler Haut Interagir Librement project. Voir LICENSE.