Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Doctrine Extensions Bundle Laravel Package

fsi/doctrine-extensions-bundle

FSi DoctrineExtensionsBundle integrates Gedmo/DoctrineExtensions into Symfony, providing configuration and service registration for ORM extensions like Timestampable, Sluggable, Tree, Translatable, SoftDeleteable, and Blameable with minimal setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • Despite the request framing this as a "Laravel/PHP package," fsi/doctrine-extensions-bundle is a Symfony bundle, not a Laravel package. It ships a Bundle subclass, a DependencyInjection\Extension, a Configuration tree, and compiler passes — none of which Laravel's container/service-provider model consumes.
  • Its actual job is narrow: it converts a YAML/PHP config block into service definitions and listener/subscriber registration for the fsi/doctrine-extensions library (FSi's fork of the Gedmo DoctrineExtensions family: Tree/NestedSet, Timestampable, Blameable, SoftDeleteable, Loggable, Sluggable, Translatable, Sortable).
  • It is a configuration convenience layer, not an ORM feature provider. All runtime behavior — event listeners, SQL filters, metadata drivers — comes from the underlying extension library. In a Laravel codebase the bundle contributes essentially zero value, because you would have to author the equivalent wiring by hand anyway.

Integration feasibility

  • Symfony target: low effort. composer require, register in bundles.php/config/bundles.php, add a fsi_doctrine_extensions: block, done.
  • Laravel target: not feasible as-is. There is no service provider, no publishable config, no facade, and no Laravel Doctrine integration. A port means writing your own provider, rebinding the extension manager, and manually attaching subscribers to the EntityManager's event manager.
  • Either target: you must independently verify PHP 8.1+/8.2+ and doctrine/orm 3.x compatibility. ORM 3 removed the annotation metadata driver in favor of attributes, and several Gedmo-lineage extensions changed their listener signatures — a 2021-vintage bundle is very likely to pin doctrine/orm ^2.x and symfony/framework-bundle ^4.4|^5.0, which would act as a hard upgrade blocker for the whole application.

Technical risk

  • Abandonment risk is the dominant factor. Last release 2021-07-26, 3 stars, 0 dependents, aggregate score 0.355. This is effectively a single-vendor internal bundle that happened to be published. There is no evidence of CI, a security policy, or an issue-triage cadence.
  • Bootstrap fragility. Symfony bundle API surface has shifted repeatedly (getContainerExtension() typing, Extension::load() return types, ContainerBuilder deprecations in 5.3/6.0). An unmaintained bundle is a recurring source of "works on 5.4, fatal on 6.4" incidents.
  • Transitive risk. The bundle is only as healthy as fsi/doctrine-extensions, which is itself a fork of gedmo/doctrine-extensions. You inherit two layers of divergence from the upstream project most of the ecosystem actually uses.
  • Opportunity score of 21.76 reads correctly: there is no strategic upside here — no ecosystem gravity, no hiring-pool familiarity, no vendor leverage.

Key questions

  1. Is the target application actually Laravel? If yes, this package should be rejected outright and replaced with native equivalents — this is a category error, not a compatibility gap.
  2. If Symfony: are we on Symfony 6/7 and Doctrine ORM 3? If so, this bundle almost certainly will not install without constraint overrides.
  3. Which extensions are genuinely required? Tree, SoftDeleteable, Timestampable, and Blameable are the common four; Loggable and Translatable are the ones with real operational cost.
  4. Why this fork rather than stof/doctrine-extensions-bundle (~1.7k stars, actively maintained, same underlying Gedmo library)? Is there a specific FSi extension not present upstream, or is this incidental legacy?
  5. What is FSi Open's stated maintenance commitment, and are we prepared to fork and own the bundle if not?

Integration Approach

Stack fit

  • Realistic compatibility envelope: PHP 7.4–8.0, Symfony 4.4/5.x, doctrine/orm 2.x. Anything newer requires verification before it can be planned into a roadmap.
  • Symfonfy-native fit is good-in-principle (idiomatic config → services wiring) but the version envelope is roughly two major Symfony releases behind current.
  • Laravel fit is poor to nonexistent. Laravel Doctrine usage in this ecosystem is rare, and the bundle offers no bridge.

Migration path

  • If the destination is Laravel, substitute per capability rather than porting: SoftDeletes trait + global scopes (SoftDeleteable), Eloquent created_at/updated_at (Timestampable), spatie/laravel-activitylog (Loggable), kalnoy/nestedset (Tree), model observers (Blameable), spatie/laravel-sluggable (Sluggable). This is a mapping exercise, not a code migration, and it eliminates the bundle entirely.
  • If the destination is Symfony, migrate to stof/doctrine-extensions-bundle plus gedmo/doctrine-extensions, unless an FSi-specific extension is load-bearing. The config keys are similar enough that the change is mostly a config rename and a subscriber re-registration.
  • If forced to keep it, vendor-fork: copy into src/, relax composer constraints, add return types, and adopt it as first-party code.

Compatibility

  • Must confirm: ORM metadata driver (annotations vs attributes) on every affected entity; extension listener signature compatibility; symfony/framework-bundle constraint; whether fsi/doctrine-extensions itself supports PHP 8.1+.
  • Metadata conversion (annotations → attributes) is the largest hidden cost if entities are still annotation-driven, and it is independent of the bundle choice.

Sequencing

  1. Two-day spike to determine the actual installed versions and whether the bundle can even be resolved — this gates everything downstream.
  2. Decide build-vs-replace: keep-and-fork (Symfony) vs. substitute-natives (Laravel) vs. swap-to-stof (Symfony, preferred).
  3. Convert entity metadata to attributes if required by the target ORM version.
  4. Establish behavioral golden tests before swapping: soft-delete filter visibility, nested-set moves under concurrency, blameable population on CLI/queue contexts, loggable write volume.
  5. Cut over behind a feature flag, one extension at a time — starting with Timestampable/Blameable (lowest risk), ending with Tree and Loggable (highest).

Operational Impact

Maintenance

  • Treat this as owned code from day one. There is no realistic expectation of upstream patches. Budget a small standing allocation for constraint bumps and Symfony/Doctrine deprecation fixes, plus a fork-maintenance line item in the dependency register.
  • MIT license is permissive, so forking is legally clean — the constraint is engineering time, not licensing.

Support

  • No community to lean on: 3 stars and 0 dependents means effectively no Stack Overflow corpus, no blog posts, no third-party troubleshooting. Escalation path is the FSi Open maintainers directly, with unknown SLA.
  • Onboarding documentation is thin; the bundle's config surface must be reverse-engineered from Configuration.php.

Scaling

  • The bundle itself is stateless config — it does not scale or fail. All scaling characteristics come from the extensions:
    • SoftDeleteable adds a SQL filter to every query on affected entities; on high-volume read paths verify index coverage includes the deleted-at discriminator.
    • Tree/NestedSet makes writes O(n) in sibling count for moves — a real bottleneck under concurrent reordering; serialize or queue those writes.
    • Loggable and Blameable attach per-flush listeners; on bulk imports they cause severe write amplification and memory growth. Explicitly detach listeners during batch jobs.
    • Translatable multiplies row counts and join complexity — the usual source of unexpected query cost.

Failure modes

  • Silent configuration drift: the bundle's config and the entity-level mapping must agree. A mismatch surfaces as an extension that simply does not fire — no exception, just missing timestamps or unpopulated blame fields, discovered weeks later in reporting.
  • Soft-delete filter leakage: queries built outside the ORM (raw SQL, DBAL, reporting replicas) bypass the filter and resurrect deleted rows.
  • Unique-constraint collisions: soft-deleted rows still occupy unique indexes unless the schema is designed for it; this fails at the worst possible moment — in production, on insert.
  • Tree corruption under concurrent moves, requiring manual repair.
  • Container boot failure on a Symfony upgrade — a hard, whole-application outage rather than a degraded feature.
  • Metadata cache staleness after extension config changes, producing behavior that differs between environments.

Ramp-up

  • The bundle itself is a half-day learn for any Symfony developer — it is pure configuration.
  • The real ramp-up is Doctrine extension semantics, which are subtle and under-documented: filter interaction with DQL, listener ordering, nested-set invariants, and how blameable behaves when there is no authenticated token (queue workers, console commands, seeders). Plan 1–2 weeks for a mid-level engineer to be genuinely productive with Tree and Loggable.
  • Knowledge concentration is a risk: with no external community, losing the one engineer who understands the listener wiring is a genuine continuity exposure. Document the config-to-behavior mapping in-repo before rollout.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console