erichard/dms-bundle
Symfony bundle for adding document management to your app: organize files in folder trees, persist document metadata with Doctrine, and integrate uploads, listings, and file access into your existing Symfony project.
Architecture fit — fundamental mismatch. Despite being catalogued as a Laravel/PHP package, erichard/dms-bundle is a Symfony 2 bundle, not a Laravel package. Laravel has no bundle mechanism; bundles depend on Symfony\Component\HttpKernel\Bundle\Bundle, DI Extension classes, ConfigurationInterface config trees, and compiler passes that only exist in the Symfony full-stack framework. Laravel's container is Illuminate, not Symfony's. There is no drop-in path — the package would have to be re-architected as a Laravel package (service provider + publishable config/migrations) before it could be evaluated on merit.
Era and viability signals. Symfony 2 has been end-of-life since November 2018 (2.8 LTS). The bundle targets PHP 5.x/7.0-era constraints that will conflict with Laravel 10/11's PHP 8.1+ floor. The catalogued signals are contradictory — 0 stars, 0 dependents, quality score 0, but an opportunity score of 4.16. Treat the opportunity score as unvalidated; the objective adoption and maintenance signals say "abandoned."
Integration feasibility — low as-is. Realistically only three paths exist: (1) do not integrate and use Laravel-native equivalents; (2) treat the bundle as a design reference and port the domain model; (3) run it as an isolated Symfony sidecar behind an API. Path 3 carries a full dead-framework operational burden for a component with zero downstream users, which is hard to justify.
Technical risk — high. A DMS is a high-trust surface: file uploads, storage paths, document ACLs, metadata, and retrieval. Shipping an unmaintained 2015-vintage upload/storage component into a modern stack creates unpatched CVE exposure and no upstream remediation path. The risk is concentrated in exactly the areas where correctness matters most.
Key questions to resolve before any decision:
Stack fit — do not force it. The pragmatic recommendation is reject direct integration and evaluate Laravel-native replacements against the same requirement set: spatie/laravel-medialibrary for attachments and conversions, Laravel's Filesystem/Flysystem for storage abstraction, Laravel Scout with Meilisearch or Typesense for document search, and a policy-based ACL layer on top. These cover the majority of what a Symfony 2 DMS bundle delivered, with active maintenance.
Migration path (if the port is chosen). There is no mechanical migration. It is a re-implementation: map bundle entities to Eloquent models and migrations, translate the storage abstraction to Flysystem disks, replace Symfony config trees with config/dms.php, and rebuild the DI wiring as a service provider with bound interfaces. Budget this as a small greenfield build informed by the original schema, not as an integration task.
Compatibility. Pin nothing and expect conflicts — the bundle's PHP and Symfony constraints will not resolve alongside a current Laravel lockfile. Composer will either refuse the install or force a downgrade of shared Symfony components (HttpFoundation, Console, Translation), which Laravel itself depends on. That is a hard blocker, not a nuisance.
Sequencing.
Maintenance. Effectively zero upstream. No security patches, no PHP 8 compatibility work, no issue triage. Every future framework upgrade becomes our problem to solve by forking. For a component touching file uploads and access control, that is a standing liability rather than a deferred cost.
Support. No vendor, no meaningful community (0 dependents means no downstream bug reports or shared fixes). Internal ownership must be assigned explicitly if adopted — otherwise it becomes orphaned infrastructure inside our own estate.
Scaling. A DMS scales on object storage, CDN delivery, and a search index, not on the bundle. Whatever we choose, plan for S3-compatible storage, signed URL delivery, async thumbnail/OCR processing on a queue, and a dedicated search backend. None of this is provided by the bundle in a way that survives the Symfony 2 constraint.
Failure modes to design against.
Ramp-up. The team would spend ramp-up time on Symfony 2 idioms — bundle extension conventions, compiler passes, XML/YAML service definitions — that have no transferable value to a Laravel codebase. That is negative-ROI learning. Ramp-up on a Laravel-native alternative is measured in days; on this bundle, in weeks, with obsolete knowledge as the output.
Recommendation. Do not integrate. Use the package as a requirements checklist for a Laravel-native DMS composition, and re-baseline the opportunity score against actual capability coverage before allocating engineering time.
How can I help you explore Laravel packages today?