endroid/form-bundle
Endroid FormBundle lets you build simple forms via Sonata Admin, store submissions, send notification emails when forms are completed, and export results. Extend behavior with custom event listeners.
Architecture fit — fundamental mismatch. Despite being distributed via Packagist and Composer-installable, endroid/form-bundle is a Symfony bundle, not a Laravel package. It registers through AppKernel::registerBundles() (a Symfony 2/3-era pattern), relies on the Symfony service container and bundle configuration semantics, and has a hard, undeclared runtime dependency on Sonata Admin Bundle for the actual form-authoring UI. Laravel has no concept of bundles or kernel registration; there is no service provider, no facade, no config publishing, and no Artisan surface. It cannot be composer require'd into a Laravel application and expected to function. Treat "Laravel/PHP package" in the request as an assumption to correct before any planning proceeds.
Integration feasibility — low to nil in a Laravel context. The feature set described (form configuration, submission storage, notification on submit, result export) is achievable natively in Laravel with substantially less ceremony: validation rules, Eloquent models, Notifications/Mailables, and a spreadsheet exporter. The only scenario where direct reuse makes sense is an existing Symfony application already running Sonata Admin. Even there, the archived status is disqualifying for new adoption.
Technical risk — high, and concentrated in maintenance and compliance.
AppKernel registration and Sonata Admin coupling imply an old PHP/Symfony floor. Modern Laravel also pulls symfony/* components at pinned versions, so Composer resolution conflicts are plausible even in a "let's just try it" spike.Key questions to resolve before any commitment:
Stack fit — none for Laravel. There is no adapter layer worth building. Writing a Symfony-bundle shim inside Laravel would mean booting a mini container, replicating Sonata Admin's routing and authorization model, and maintaining that bridge indefinitely — strictly more work than implementing the feature.
Migration path — three viable options, ranked.
forms table for configuration and a form_submissions table for results, dynamic validation assembled from stored field definitions, a notification on submit, and an export via a maintained spreadsheet library. Scope is bounded and the resulting code is ours, testable, and upgrade-safe.Compatibility. Verify against our actual PHP version and framework majors before spending time: the AppKernel pattern predates Symfony 4, and the Sonata Admin constraint is not pinned in the README. Assume the package will not install cleanly on a current PHP 8.x runtime. Any spike should timebox Composer resolution to under a day and treat a dependency conflict as a terminal result rather than something to fight.
Sequencing.
Maintenance — the dominant cost. An archived package transfers 100% of maintenance to us from day one: no security advisories, no PHP or framework bumps, no bug fixes. In the fork scenario we inherit a Symfony bundle we otherwise have no reason to operate, creating a permanent skills and ownership island. In the reimplementation scenario, maintenance collapses to ordinary application code inside a stack we already staff.
Support. No vendor, no maintainer, no community. Zero stars and zero dependents mean there is effectively no one to escalate to and no prior art to search when something breaks. The README is the entirety of the documentation — no integration guide, no configuration reference, no upgrade notes.
Scaling — likely weak points. Notifications appear to fire inline on submission, making the mail transport a latency and failure dependency in the request path; these belong on a queue. Exports appear to be generated in-request, which will hit memory and execution-time limits as submission volume grows. Form configuration and submission storage are database-backed, which is fine, but the read pattern for the admin listing needs indexing and pagination review at volume. None of this is unfixable — but fixing it means editing code nobody maintains.
Failure modes to plan for.
Ramp-up. Conceptual ramp-up is low — the feature set is familiar and small. Practical ramp-up is high: the code is undocumented, written against an unfamiliar bundle idiom, and requires Sonata Admin fluency to even navigate. Budget for reverse-engineering, not reading docs. This asymmetry is itself an argument for reimplementation, where the codebase is legible to the whole team on day one.
How can I help you explore Laravel packages today?