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

Symfony Dropzone Laravel Package

ethsam/symfony-dropzone

Symfony Dropzone Bundle integrates Dropzone.js drag-and-drop uploads into Symfony Forms, with automatic Doctrine entity relationship handling, pre-populated edit forms, image resizing, and configurable single or multiple file modes.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Headline finding — stack mismatch: despite the request framing this as a "Laravel/PHP package," ethsam/symfony-dropzone is a Symfony bundle, not a Laravel package. It ships a Symfony Flex recipe/bundle class, depends on symfony/form, the Symfony Doctrine bridge, and Doctrine ORM, and its extension points are Symfony form types and route handlers. It cannot be composer required into a Laravel application and used as-is.

Architecture fit (if the target stack is Symfony): Reasonable but opinionated. The bundle occupies the form-layer niche between Dropzone.js and Doctrine, providing (a) a form type that renders a Dropzone widget, (b) a data transformer that maps submitted IDs to entities, and (c) support for managing OneToMany/ManyToOne associations on save. That is a coherent slice of work and saves roughly a sprint of glue code. It is a thin convenience layer, not infrastructure — it does not own storage, virus scanning, or file lifecycle.

Architecture fit (if the target stack is Laravel): Poor. Nothing transfers except the concept. Laravel has no EntityType, no bundle registration, and no Doctrine bridge in the default stack. You would be rebuilding the equivalent on top of Eloquent, Livewire/Inertia, and a Laravel upload controller. In that scenario this package is at best a reference implementation to read, not a dependency.

Integration feasibility: Moderate for a Symfony shop, with caveats. The README claims PHP ≥8.1, Symfony 5.4/6.x/7.x, and Doctrine ORM 2.12+, with published READMEs in EN/FR/ES, a changelog, releases, and MIT licensing — the documentation hygiene is better than the adoption metrics suggest. The significant unknowns are whether Doctrine ORM 3.x is actually supported (only 2.12+ is stated, and ORM 3 removed APIs that entity-ID transformers commonly rely on) and whether Dropzone.js itself is vendored, expected via Encore/AssetMapper, or left entirely to the integrator.

Adoption signals: 3 stars, 0 dependents, an overall score of ~18, and a description reading "symfony-dropzone custom" all point to a personal/internal fork published to Packagist rather than a maintained community library. The stated last release date (2026-08-17) should be re-verified directly against Packagist — a future-dated release is more likely a registry/scrape anomaly than a real artifact, and the answer materially changes the maintenance assessment.

Technical risk:

  • Automated association management is the riskiest feature. A form type that writes Doctrine relations from user-submitted IDs is a classic IDOR surface: any ID posted by the client is a candidate for association unless the consuming app filters the query. Treat it as a convenience that must be wrapped, not trusted.
  • Upload endpoints are app-supplied. The README describes "custom upload/remove handlers: route-based endpoints with JSON responses," which means MIME validation, size limits, filename sanitization, storage path traversal, auth/CSRF, and authorization checks are all the integrator's responsibility. There is no evidence of a hardened default.
  • Single-maintainer bus factor with zero downstream users means no implicit regression testing from the ecosystem.
  • Front-end coupling: client-side resizing is advertised, but Dropzone.js version drift and your asset pipeline are unmanaged by the package.

Key questions to answer before committing:

  1. Is the target application Symfony or Laravel? (If Laravel: stop here.)
  2. Which Doctrine ORM major version is in use, and is ORM 3 actually exercised in CI?
  3. Who owns the upload endpoint, and what validation/authorization does the package provide versus assume?
  4. Does the package delete files from storage when an association is removed, or only detach the entity reference (orphan file risk)?
  5. What is the actual, verified release cadence and issue-response history?
  6. Is the EntityType-based single-file path compatible with our form theme and validation constraints?

Integration Approach

Stack fit: Target Symfony 6.4/7.x on PHP 8.2+, Doctrine ORM 2.x, Twig, and either Webpack Encore or AssetMapper for the Dropzone.js asset. If the estate is Laravel, the correct integration approach is non-adoption — implement a Dropzone/FilePond front end against a native Laravel upload controller, and mine this repository only for the ID-to-entity transformer pattern.

Migration path (Symfony): There is no migration from an existing system implied; this is greenfield glue. The realistic path is: fork the repository into an internal namespace (or vendor it) on day one, so that the association-management and upload-handler behavior can be patched without waiting on an upstream that may not respond. Publish internally via a private Composer registry or a VCS repository entry.

Compatibility: Pin explicitly. Verify the bundle's composer.json constraints against your PHP floor, Symfony minor, and Doctrine major. The Doctrine bridge is a transitive dependency worth pinning separately, since the single-file mode builds on EntityType and bridge behavior changes across Symfony majors. Confirm the Dropzone.js version the widget's JS expects and reconcile with your asset build; do not let the bundle inject an unpinned CDN script into production templates.

Sequencing:

  1. Spike (1–2 days): one form with a single-file upload and one with a OneToMany association, on the exact PHP/Symfony/Doctrine versions we run. Confirm asset loading and edit-mode pre-population.
  2. Harden the endpoints (3–5 days): own the upload/remove routes outright — authentication, per-object authorization, MIME and magic-byte validation, size caps, randomized storage names, and explicit deletion semantics.
  3. Wrap, don't spread: expose one internal form type that composes the bundle's type and enforces our validation and authorization. Forbid direct use of the bundle's type in feature code, so a future replacement is a one-file change.
  4. Pilot: a single low-risk form (e.g., internal document attachment) for one release cycle, with instrumentation on upload failures and orphan files.
  5. Roll out only after the pilot confirms the Doctrine 3 question and file-lifecycle behavior.

Operational Impact

Maintenance: Assume you are the maintainer. One maintainer, three stars, zero dependents, and a "custom"-flavored description indicate an upstream that may go quiet without notice. Budget for a periodic (quarterly) review against new Symfony and Doctrine majors; the form-type and data-transformer APIs are exactly the surfaces that churn across Symfony majors. The fork-and-patch posture above is not optional risk mitigation, it is the operating model.

Support: Community-only, effectively best-effort. There is no vendor, no SLA, and likely no security-response process. Add the package to the dependency-scanning and CVE-watch list, and treat any advisory as "we patch our fork."

Scaling: The design pushes file bytes through a Symfony controller. That means PHP upload_max_filesize/post_max_size, request timeouts, and web-server body limits become your throughput ceiling, and large uploads occupy PHP workers. Client-side image resizing helps for images only. There is no mention of chunked/resumable uploads, direct-to-object-storage (S3 pre-signed) uploads, or async post-processing — so for anything beyond modest file sizes or high upload concurrency, plan on an out-of-band storage path and use the bundle only for the form/widget layer. Also watch Doctrine write amplification when a single form manages many associations.

Failure modes to instrument:

  • Orphaned files on disk after entity deletion or failed association save (storage cost and potential data-retention exposure).
  • Orphaned association rows / broken foreign keys when the remove handler detaches without deleting, or vice versa.
  • Silent partial uploads where Dropzone reports success but the entity relationship did not persist.
  • ID-tampering attempts against the entity-ID transformer — log and alert on rejected IDs.
  • Asset-pipeline breakage when Dropzone.js is upgraded independently of the widget templates.
  • Validator drift: a file that passes the client-side acceptedFiles filter but fails server-side validation, or worse, passes server-side because no validation was configured.

Ramp-up: Low for a developer already fluent in Symfony forms and Doctrine — the widget surface is small and the README is clear. The real ramp-up cost is trust verification: the team must read the form type and transformer source to understand exactly what it does with submitted IDs and when it flushes, because that behavior is not fully specified in the docs. Estimate half a day of source review per engineer touching the feature, plus the hardening work in step 2 above. Given the overall score (~18) and negligible adoption, I would approve this only as a small, forked, internally-wrapped convenience layer on a Symfony stack — and reject it outright for Laravel.

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.
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package