Bibliothek / SDK
doctrine-extensions/DoctrineExtensions avatar
doctrine-extensions/DoctrineExtensions

gedmo/doctrine-extensions: Verhaltens-Erweiterungen für Doctrine ORM und MongoDB ODM

Verhaltenserweiterungen von Doctrine2, Translatable, Sluggable, Tree-NestedSet, Timestampable, Loggable, Sortable.

4.138 Sterne1.250 ForksPHPMIT
GitHub

Auf einen Blick

Was ist das?
DoctrineExtensions stapelt bewährte Behaviors wie Translatable, Sluggable, Timestampable, Tree, Loggable und SoftDeleteable auf das Ereignissystem von Doctrine. Der Text ordnet die einzelnen Erweiterungen, die Mapping-Varianten, Kompatibilitätsmatrix und den Testbetrieb mit Docker ein.
Für wen ist es gedacht?
DoctrineExtensions gehört in jedes PHP-Projekt, das mit Doctrine ORM oder MongoDB ODM arbeitet und Behaviors wie Slugs, Versionshistorie oder hierarchische Bäume nicht selbst implementieren will. Der Composer-Bezug gedmo/doctrine-extensions ist der Standardweg, und die Upgrade-Dokumentation von 2.4 auf 3.0 sollte vor jedem Major-Sprung gelesen werden.
Darf ich es kommerziell nutzen?
Ja. MIT ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
Wird es noch gepflegt?
Ja. Die letzten Commits kamen vor 15 Tagen.
In welcher Sprache ist es geschrieben?
Hauptsächlich PHP, laut der Sprachstatistik von GitHub.

Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.

TIEFGEHENDE OPEN-SOURCE-ANALYSE

Behaviors am Doctrine-Ereignissystem statt eigener Boilerplate

Das Paket gedmo/doctrine-extensions aus dem GitHub-Konto doctrine-extensions beschreibt sich als Sammlung von Erweiterungen für Doctrine ORM und MongoDB ODM, die neue Funktionalität bereitstellen oder den Umgang mit Doctrine effizienter machen. Der technische Weg ist derselbe für alle Behaviors: Sie hängen sich an das Ereignissystem von Doctrine und verarbeiten die Datensätze, die beim Flush durchlaufen werden. Aus Entwicklersicht heißt das, dass eine Entität ihr Verhalten über Mapping-Metadaten erhält und der Anwendungsk code davon kaum berührt wird.

Das Konzept ist alt, aber nicht veraltet: Die Erweiterungen stammen ursprünglich aus der Arbeit von Gediminas Morkevičius und werden seit Jahren von einer Liste namentlich genannter Betreuer weitergeführt, darunter David Buchmann und Konstantin Kudryashov. Mit 4.139 Sternen und 55 offenen Issues zeigt sich das Repository gepflegt; das Release v3.22.1 erschien am 1. August 2026, rund acht Monate nach v3.22.0. Diese Abstände deuten auf punktuelle Wartung hin, nicht auf eine aktive Funktionspipeline.

Translatable, Sluggable und Timestampable im ORM-Alltag

Drei der Erweiterungen begegnen fast jedem ORM-Projekt. Timestampable aktualisiert Datumsfelder beim Anlegen, Aktualisieren oder bei Änderung einer Eigenschaft, sodass created-at- und updated-at-Spalten nicht mehr von Hand gesetzt werden. Sluggable erzeugt aus benannten Feldern einen eindeutigen URL-Slug, was für Verzeichnisse, Blogs und jede Seite mit sprechenden URLs relevant ist. Translatable löst die Übersetzung von Datensätzen in mehrere Sprachen, laut README mit geringem Einrichtungsaufwand.

Daneben stehen Blameable, das Zeichenketten- oder Referenzfelder beim Anlegen und Ändern mit einem Akteur wie dem Benutzer befüllt, sowie Loggable, das Änderungen und Historien von Objekten verfolgt und Versionsverwaltung unterstützt. Für Audit-Anforderungen in regulierten Umgebungen ist genau diese Kombination der Grund, das Paket einzusetzen, statt eigene Listener zu schreiben, die denselben Ereignisfluss nachbilden.

Bäume, SoftDeleteable und die Unterschiede zwischen ORM und ODM

Die Tree-Erweiterung automatisiert die Verwaltung hierarchischer Daten und bietet drei Strategien: closure, nested set und materialized path. Beim MongoDB ODM lautet die Einschränkung im README klar: Nur materialized path wird unterstützt. Wer Bäume in einem Hybrid-Stack über beide Persistenzschichten führen will, sollte diese Asymmetrie in das Datenmodell einplanen.

Als ORM-only eingestuft sind IpTraceable, das von Timestampable erbt und statt eines Zeitstempels die IP-Adresse setzt, SoftDeleteable für das implizite Entfernen von Datensätzen, Sortable für sortierbare Entitäten und Uploadable für Datei-Uploads in Entity-Feldern. Umgekehrt gibt es zwei ODM-only-Erweiterungen: References verknüpft Entities mit Documents und umgekehrt, ReferenceIntegrity beschränkt Document-Referenzen in MongoDB. Diese Aufteilung zeigt, dass das Paket keine abstrakte Utility-Sammlung ist, sondern die Fähigkeiten beider Persistenzschichten jeweils korrekt abbildet.

Mapping über Attribute, XML und die veralteten Annotations

Alle Erweiterungen unterstützen laut README Attribute, XML und Annotation-Mapping, wobei Annotations als veraltet markiert sind. Für neue Projekte auf PHP 8 ist der Weg damit vorgezeichnet, während Bestandsanwendungen schrittweise umstellen können. Wer ein zusätzliches Mapping-Format braucht, kann eigene Mapping-Treiber über die Mapping-Erweiterung ergänzen.

Beim XML-Weg gibt es eine Falle, die das README eigens ausweist: Das Mapping liegt in einem eigenen Namensraum, http://gediminasm.org/schemas/orm/doctrine-extensions-mapping, und das Root-Element muss das gedmo-Präfix mit diesem Namensraum deklarieren. Die XSD-Schemata sind zudem versioniert, mit eigenen URLs für die Zweige 2.2.x und 2.1.x. Wer alte XML-Mappings übernimmt, sollte die Namensraum-URL gegen die eigene Paketversion prüfen, sonst schlägt die Validierung beim Laden der Metadaten fehl.

Kompatibilitätsmatrix, Composer-Bezug und Framework-Anbindung

Die Versionsmatrix im README ist präzise: DBAL in Version ^3.2 für alle Erweiterungen oder ^4.0, wobei Loggable bei DBAL 4.0 ausgenommen ist; ORM ^2.14 oder ^3.0; MongoDB ODM ^2.3. Die Installation läuft über composer require gedmo/doctrine-extensions. Für Symfony, Laravel und Laminas existieren eigene Anleitungen im doc-Verzeichnis, frameworks/symfony.md, frameworks/laravel.md und frameworks/laminas.md.

Ein Randfall steht im README mit der Issue-Nummer #1310 verlinkt: Wer den Entity Manager ohne Framework aufsetzt, sollte sich das Beispiel in example/em.php ansehen, um typische Fehler zu vermeiden. Für Upgrade-Pfade gibt es ein eigenes Dokument, doc/upgrading/upgrade-v2.4-to-v3.0.md, das die Aufräumarbeiten der Version 3.0 beschreibt: erhöhte Mindestversionen von PHP, Doctrine und anderen Abhängigkeiten, Unterstützung der aktuellen MongoDB- und Common-Pakete sowie eine erneuerte Testsuite und Code-Standards.

Tests mit Docker Compose und das beiliegende Beispiel

Wer die Erweiterungen selbst verändert oder bei einem Update auf Nummer sicher gehen will, findet einen vollständigen Testweg im README: docker compose up -d startet die Container im Hintergrund, docker compose exec php bash öffnet die Arbeitsumgebung unter /var/www, nach composer install läuft die Suite über vendor/bin/phpunit. Das setzt Docker und ein funktionierendes docker compose voraus, umgeht aber alle lokalen Abhängigkeitsprobleme mit Datenbankvarianten.

Daneben liegt ein lauffähiges Beispiel im Repository: Nach composer install konfiguriert man in example/em.php die eigene Datenbank, erzeugt das Schema mit php example/bin/console orm:schema-tool:create und gibt mit php example/bin/console app:print-category-translation-tree einen Übersetzungsbaum für Kategorien aus. Das Beispiel zeigt Translatable und Tree im Verbund und ist damit der schnellste Weg, das Verhalten der Erweiterungen ohne eigene Entitäten zu beobachten.

Redaktionelles Fazit

DoctrineExtensions gehört in jedes PHP-Projekt, das mit Doctrine ORM oder MongoDB ODM arbeitet und Behaviors wie Slugs, Versionshistorie oder hierarchische Bäume nicht selbst implementieren will. Der Composer-Bezug gedmo/doctrine-extensions ist der Standardweg, und die Upgrade-Dokumentation von 2.4 auf 3.0 sollte vor jedem Major-Sprung gelesen werden. Wer DBAL 4.0 einsetzt, muss beachten, dass Loggable laut Kompatibilitätsmatrix davon ausgeschlossen ist; vor dem Update hilft ein Lauf über vendor/bin/phpunit im bereitgestellten Docker-Container.

Offizielle Quellen

  1. Official README
  2. Project repository
  3. Release notes
Community-Notizen

Community-Notizen