DoctrineExtensions : des comportements Doctrine pilotés par les événements
Extensions comportementales Doctrine2, traduisibles, Sluggables, Tree-NestedSet, Timestampable, Loggable, Sortable.
En bref
- De quoi s’agit-il ?
- Les extensions PHP pour ORM et MongoDB ODM ajoutent traduction, slugs, arbres, historique et métadonnées aux entités lors du flush.
- À qui s’adresse-t-il ?
- Ce projet convient aux équipes qui recherchent précisément les capacités décrites par DoctrineExtensions et acceptent de vérifier sa compatibilité avec leur environnement. Il convient moins à celles qui attendent une couverture ou un support que le README ne promet pas.
- Puis-je l’utiliser commercialement ?
- Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
- Est-il encore maintenu ?
- Oui. Les derniers commits datent d’il y a 15 jours.
- En quel langage est-il écrit ?
- Principalement PHP, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
Extensions attachées au système d'événements de Doctrine
Le paquet contient des extensions pour Doctrine ORM et MongoDB ODM qui ajoutent du comportement aux enregistrements lorsqu'ils sont vidés via le système d'événements de Doctrine. Ces extensions s'attachent au système d'événements et traitent les enregistrements de manière comportementale, c'est-à-dire qu'elles réagissent aux opérations de vidage plutôt que d'exiger des appels manuels. Le README liste six extensions disponibles à la fois pour ORM et MongoDB ODM : Blameable, qui met à jour les champs de chaîne ou de référence lors de la création, de la mise à jour ou du changement de propriété ; Loggable, qui suit les modifications et l'historique et prend en charge la gestion de versions ; Sluggable, qui transforme les champs spécifiés en un slug unique ; Timestampable, qui met à jour les champs de date lors de la création, de la mise à jour ou du changement de propriété ; Translatable, qui offre un moyen de traduire les enregistrements dans différentes langues ; et Tree, qui automatise la gestion des arbres avec les stratégies de closure, d'ensemble imbriqué ou de chemin matérialisé sur ORM, et uniquement le chemin matérialisé sur MongoDB ODM. Pour ORM uniquement, le paquet inclut IpTraceable, qui définit une adresse IP au lieu d'un horodatage ; SoftDeleteable, qui permet la suppression implicite d'enregistrements ; Sortable, qui rend tout document ou entité triable ; et Uploadable, qui gère les téléversements de fichiers dans les champs d'entité. Pour MongoDB ODM uniquement, il y a References, qui lie les entités dans les documents et vice versa, et ReferenceIntegrity, qui contraint les références de documents MongoDB ODM.
La version 3.0 cible PHP et Doctrine modernes
La version 3.0 est décrite comme se concentrant sur l'actualisation du paquet pour le PHP d'aujourd'hui. Le README énumère plusieurs domaines de changement : augmentation des exigences de version minimale de PHP, Doctrine et autres dépendances ; implémentation du support des derniers paquets Doctrine MongoDB et Common ; mise à jour de la suite de tests, ajout de normes de code et de style, et d'autres outils de construction ; et nettoyage de la documentation, du code et des commentaires. Il existe un document de mise à niveau à /doc/upgrading/upgrade-v2.4-to-v3.0.md qui couvre le passage de 2.4.x à 3.0. Le README ne fournit pas de journal des modifications pour chaque version, donc les détails au-delà de ces points de synthèse ne se trouvent pas dans la documentation principale du dépôt.
Installation via Composer et documentation des frameworks
L'installation utilise Composer avec `composer require gedmo/doctrine-extensions`. Le README renvoie à une documentation distincte pour Symfony, Laravel et Laminas, mais ne montre pas les étapes d'installation pour ces frameworks. Il renvoie également à un guide de mise à niveau de 2.4.x à 3.0. Pour les projets qui configurent le gestionnaire d'entités sans framework, le README pointe vers un fichier d'exemple à /example/em.php et mentionne le problème #1310, suggérant que cet exemple existe pour prévenir un problème de configuration connu. Aucune autre méthode d'installation ou exigence d'environnement n'est décrite.
Catégories d'extensions et pilotes de mapping
Les extensions sont regroupées en trois catégories : celles qui fonctionnent à la fois avec ORM et MongoDB ODM, celles qui sont uniquement ORM, et celles qui sont uniquement MongoDB ODM. Le README liste les extensions spécifiques dans chaque groupe, comme détaillé dans la première section. Toutes les extensions prennent en charge le mapping par attributs, XML et annotations, ce dernier étant explicitement marqué comme obsolète. Des pilotes de mapping supplémentaires peuvent être implémentés à l'aide de l'extension Mapping, selon le README. Le mapping XML nécessite un espace de noms spécifique : http://gediminasm.org/schemas/orm/doctrine-extensions-mapping, et les schémas XSD sont versionnés. Le schéma le plus récent se trouve à cette URL, et les versions 2-2 et 2-1 ont des suffixes dans l'URL. Le README montre un exemple de nœud racine XML avec l'espace de noms gedmo déclaré.
Contraintes de versions des dépendances
Le README spécifie la compatibilité des versions pour les dépendances Doctrine. Pour DBAL, il accepte ^3.2 pour toutes les extensions, ou ^4.0 pour toutes les extensions sauf Loggable, qui ne semble pas prendre en charge ^4.0. Pour ORM, les versions prises en charge sont ^2.14 ou ^3.0. Pour MongoDB ODM, la version prise en charge est ^2.3. Ce sont les seules contraintes de versions de dépendances listées. Le README ne mentionne pas d'exigences de version PHP spécifiques, bien qu'il indique que la version 3.0 augmente les exigences de version minimale, donc la version PHP minimale exacte n'est pas indiquée dans le README et doit être vérifiée dans le composer.json du paquet.
Exécution des tests et de l'exemple
Le README donne les étapes pour exécuter la suite de tests avec Docker. Il nécessite l'installation de Docker et la disponibilité de `docker compose`, puis l'exécution de `docker compose up -d` à la racine du projet pour démarrer les conteneurs en mode démon, l'entrée dans le conteneur avec `docker compose exec php bash` (ce qui vous place dans /var/www), l'installation des dépendances Composer avec `composer install`, et l'exécution de `vendor/bin/phpunit`. Pour l'exemple, après avoir téléchargé Composer et installé les bibliothèques de développement avec `composer install`, vous modifiez `example/em.php` pour configurer une base de données, puis exécutez `php example/bin/console` pour les commandes console, `php example/bin/console orm:schema-tool:create` pour créer le schéma, et `php example/bin/console app:print-category-translation-tree` pour afficher l'arbre de traduction des catégories. Le README remercie également les contributeurs et nomme spécifiquement plusieurs personnes qui créent et maintiennent de nouvelles extensions.
Vérifier DoctrineExtensions sur un cas réel
`docker compose up -d`, puis `vendor/bin/phpunit` et `php example/bin/console app:print-category-translation-tree` permettent de contrôler les extensions et l’exemple. Cette vérification relie directement la documentation de DoctrineExtensions à l’usage visé : elle permet de constater les fichiers lus, la commande exécutée et le résultat observable, sans déduire une garantie que le README ne formule pas.
Conclusion éditoriale
Ce projet convient aux équipes qui recherchent précisément les capacités décrites par DoctrineExtensions et acceptent de vérifier sa compatibilité avec leur environnement. Il convient moins à celles qui attendent une couverture ou un support que le README ne promet pas. Avant décision, exécutez le contrôle suivant : `docker compose up -d`, puis `vendor/bin/phpunit` et `php example/bin/console app:print-category-translation-tree` permettent de contrôler les extensions et l’exemple.
Notes de la communauté