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

polishsymfonycommunity/doctrine-extensions-bundle

Symfony bundle that integrates Doctrine extensions such as Gedmo Sluggable, Timestampable, Tree, Translatable, and Loggable, with simple configuration and service registration for adding common behavioral features to Doctrine entities.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit: Poor — the package is not a Laravel package. polishsymfonycommunity/doctrine-extensions-bundle is a Symfony bundle that registers and configures the Gedmo/Atlantic18 DoctrineExtensions Blameable listener (auto-populating createdBy / updatedBy on persist/update). Its actual value is Symfony DI wiring — a small service definition plus config tree — around code that lives in gedmo/doctrine-extensions. Laravel has no bundle/kernel registration concept, and its default persistence layer is Eloquent, not Doctrine ORM. There is no architectural seam where this package plugs in.

Integration feasibility: Very low, and not worth pursuing. To use it at all you would need laravel-doctrine/orm in the stack, then reimplement the bundle's ~100 lines of container configuration by hand, because Symfony's bundle discovery and Configuration/Extension classes do not execute under Laravel's service container. At that point you are not leveraging the package — you are using Gedmo directly and paying a translation tax. The business capability requested (audit stamping of created_by / updated_by) is roughly 30–60 lines of idiomatic Laravel: an Auditable trait, an updating/creating model observer, and a nullable FK migration.

Technical risk: High, effectively unquantifiable. The package is archived, has 11 stars, zero dependents, and a composite score of 0.23 — no downstream validation, no maintainer, no security response path. It is Doctrine2-era: expect Composer constraints pinned to symfony/symfony ^2.x, php ^5.x/^7.x, and doctrine/orm ^2.x, which will conflict with modern illuminate/* components and current PHP runtimes. Doctrine\Common\Persistence\* namespaces used in that era were removed, so a --ignore-platform-reqs install is likely to fail at runtime, not install time — the worst failure mode.

Key questions for the requesting team:

  • Is the requirement genuinely "blameable columns," or is it broader audit history (who changed what, before/after values)? The latter rules this package out entirely and points to owen-it/laravel-auditing.
  • Is the target application actually Laravel, or is this a Symfony service being mislabelled in the intake? If Symfony + Doctrine, the live answer is stof/doctrine-extensions-bundle + gedmo/doctrine-extensions, not this fork.
  • Who is the actor in non-HTTP contexts (queue workers, scheduled commands, seeders)? Blameable requires a user resolver; the Symfony bundle supplies a token-storage-based one that has no Laravel equivalent, so that integration must be written anyway.
  • Are we prepared to fork and own an archived dependency for a 50-line feature?

Recommendation: Do not adopt. Treat this as a capability signal, not a package candidate. Record the decision as "rejected — archived, wrong framework, wrong ORM, zero adoption," and implement the behavior natively.

Integration Approach

Stack fit: None. Laravel + Eloquent is the default and the only path with first-class support. Laravel + Doctrine is a viable but minority stack; even there, the supported route is laravel-doctrine/extensions, which already wraps Gedmo listeners — installing a Symfony bundle on top is strictly redundant.

Recommended implementation (Laravel/Eloquent):

Concern Native approach
Schema $table->foreignId('created_by')->nullable()->constrained('users'), same for updated_by
Behavior Auditable trait + Model::creating / Model::updating hooks (or a single observer)
Actor resolution Auth::id() with an explicit fallback for console/queue contexts
Provenance Optional AuditableResolver interface so jobs and impersonation can override the actor safely

Migration path (if a Doctrine layer genuinely exists): Use gedmo/doctrine-extensions directly, register the BlameableListener as a Doctrine event subscriber in a service provider, and set the user via an event listener on Laravel's auth events. Do not attempt to port the bundle.

Compatibility: Expect hard conflicts. The bundle's composer.json will pin Symfony 2 components that illuminate/support and modern Symfony packages cannot co-install with. Any attempt to force it requires replace/provide hacks or a fork, both of which convert a 1-day task into an open-ended maintenance liability.

Sequencing: (1) Confirm the requirement is column stamping, not full audit trail. (2) Timebox a 2-hour spike to prove the install fails — this is useful evidence for the decision record. (3) Implement the native trait + migration + tests. (4) Backfill existing rows to a known sentinel (null or system user) with a documented decision. Total: one engineer-day.

Operational Impact

Maintenance: Full ownership transferred to us on day one. Archived means no upstream patches, no PHP-version bumps, no Doctrine-version bumps, no CVE response. Because it is a thin config layer, the real dependency risk is Gedmo's listener underneath — you inherit that risk without inheriting its maintenance cadence. A fork is mandatory if you proceed, which means a named owner, a mirror, and a review obligation at every PHP/framework upgrade.

Support: None. No issue triage, no maintainer response, no documented upgrade path. Any production defect is diagnosed by reading vendor source. This is acceptable for a vendored 50-line utility; it is not acceptable for a dependency in the persistence write path.

Scaling: Modest direct cost, real indirect cost. Blameable adds no meaningful query overhead (it mutates the entity before flush), but it does add a hard coupling between every write and an actor-resolution service. Under high write concurrency the listener is cheap; the operational hazard is the stamp semantics — user resolution failing open (null actor) silently degrades audit quality, and that degradation is invisible until an audit is requested.

Failure modes to plan for:

  • Null actor in async contexts — queue workers, scheduled commands, and seeders have no authenticated user; naive implementations either throw on flush or write null. Must be designed, not defaulted.
  • Missing schema columns — the listener writes to mapped fields only; forgetting the migration produces a silent no-op, not an error.
  • Listener not registered — in a manually wired Doctrine setup, a misconfigured subscriber means audit columns are quietly empty for an entire release.
  • Impersonation and multi-tenancy — "who" is ambiguous when an admin acts as a user; the actor model must be decided before the trait is written.
  • Archived-dependency drift — a future PHP or framework upgrade blocks on a package nobody maintains.

Ramp-up: Low conceptually, negative in practice. The domain concept (audit stamping) is understood by any mid-level engineer in an hour. The cost is that engineers spend time reverse-engineering a dead Symfony bundle, evaluating whether it should work, and then discovering the actor resolver has no Laravel analogue. The native implementation is faster to build, faster to onboard, and readable to every Laravel engineer on the team.

Net TPM position: Reject the package, capture the underlying requirement, ship the native implementation, and add "archived + framework mismatch" as an explicit intake filter so similarly low-signal packages stop reaching evaluation.

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.
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
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource