mkietlinski/doctrine-extensions-bundle
A Symfony bundle that integrates Gedmo's Doctrine extensions, making it easy to register and configure behaviors like timestampable, sluggable, softdelete, tree, translatable, and blameable across your entities with minimal setup.
Architecture fit. The framing here needs correcting before anything else: this is a Symfony bundle, not a Laravel package. Its entire contribution is framework glue — a Bundle class, a DI extension, and config-driven registration of Gedmo's Doctrine event subscribers. Laravel does not discover or boot Symfony bundles, so in a Laravel target that layer is dead weight. The capability underneath (gedmo/doctrine-extensions: Timestampable, Sluggable, SoftDeleteable, Tree, Translatable, Blameable, Loggable, Sortable) is real and roadmap-relevant; this distribution delivers none of it to a Laravel app. From a TPM standpoint the value proposition — "turn weeks of cross-cutting feature work into configuration" — is valid for the underlying library and zero for the package.
Integration feasibility. Low, and not worth forcing. The only working path is to depend on gedmo/doctrine-extensions directly and register subscribers in a DoctrineServiceProvider — which means the package under evaluation is removed, not integrated. Adopting it as-is would require pulling in Symfony's DI/config/kernel machinery solely to satisfy a contract nothing else in the stack honors. That is a cost with no corresponding scope reduction.
Technical risk. High, and driven by provenance rather than code quality:
stof/doctrine-extensions-bundle). No signal of maintenance against Doctrine ORM 3.x, PHP 8.3+, or Symfony 7.mkietlinski/doctrine-extensions-bundle) does not match the repository name (StofDoctrineExtensionsBundle). That obscures fork-vs-upstream provenance and makes security review of the delta harder than it should be.Key questions for the requester. (1) Is any part of the estate actually Symfony, or is this a mis-specified dependency that should be closed? (2) Which behaviors are genuinely required — most have mature Eloquent-native equivalents. (3) What specific upstream defect motivated the fork, and who owns patching it? (4) Which PHP, Doctrine ORM, and Symfony versions must be supported? (5) Is persistence Eloquent or laravel-doctrine/orm? That single answer flips the recommendation.
Stack fit. Three viable paths, none of which is this fork:
stof/doctrine-extensions-bundle — same abstraction, maintained, documented, with a real user base.gedmo/doctrine-extensions, resolve the EntityManager, fetch its EventManager, and register subscribers in a service provider. A small config file plus a provider is less code than vendoring the bundle, and it is code you control.spatie/laravel-sluggable; Translatable → spatie/laravel-translatable; Tree → kalnoy/nestedset; Loggable → spatie/laravel-activitylog; Blameable → model observers.Migration path. If the team is already on Gedmo via this fork, migration is mechanical: pin stof upstream at the matching major (or drop to gedmo/doctrine-extensions on Laravel), port the extension config block, remove the fork from composer.json, verify all entity mappings load. Budget half a day per environment — the risk is not code volume but listener registrations silently disappearing.
Compatibility. Before any adoption, pin and test explicitly: PHP minor, Doctrine ORM 2.x vs 3.x, attribute vs annotation metadata driver, and Symfony 5/6/7 if applicable. The fork states nothing; treat every cell as unverified until a prototype passes.
Sequencing. (1) Confirm the framework target and close out the mis-specification — this is the cheapest possible resolution. (2) Inventory entities and name the exact behaviors required, nothing speculative. (3) Choose upstream or Eloquent-native per behavior, not as a single block decision. (4) Prototype on one low-risk entity, asserting soft-delete filtering and timestamp writes end-to-end. (5) Roll out behavior-by-behavior with integration tests that prove listener execution, not merely the absence of exceptions. (6) Remove the fork and pin the chosen dependency.
Maintenance. The fork is a standing liability, not a one-time adoption cost: every Doctrine bump and PHP upgrade becomes a manual rebase against a package with no maintainer depth. Zero dependents means you are the only consumer — nobody else catches a break first, and there is no path to upstreaming your patches.
Support. No community, no meaningful issue history, no documentation beyond upstream's. Internal escalation is the only channel, which means someone must own the upstream diff as an ongoing named responsibility. As a TPM, that is a headcount commitment, not a footnote.
Scaling. Gedmo extensions are lifecycle listeners; costs are behavioral rather than linear:
Failure modes. The dangerous ones are silent:
gedmo/doctrine-extensions bump breaks the fork's pinned constraints and blocks unrelated dependency upgrades app-wide.Ramp-up. Doctrine's UnitOfWork and lifecycle events are a different mental model from Eloquent. Engineers fluent in Laravel need real (not nominal) ramp-up on entity state, flush timing, and event ordering before Gedmo behavior is debuggable — roughly one to two weeks to productive competence for a mid-level engineer, plus ownership of the fork diff. On an Eloquent codebase that entire cost is avoidable.
Recommendation. Do not adopt. The underlying Gedmo behaviors are worth having on the roadmap; this specific distribution is not — it is a Symfony-only shim with no adoption, no maintenance signal, and no fit for a Laravel target. Standardize on upstream stof/doctrine-extensions-bundle where Symfony is genuinely in scope, on gedmo/doctrine-extensions with an in-house Laravel provider where Doctrine is in use, and on Eloquent-native equivalents otherwise. Treat this package as closed unless the requester can confirm a Symfony target and a specific upstream defect the fork resolves.
How can I help you explore Laravel packages today?