whatwedo/crud-bundle
whatwedo/crud-bundle generates full CRUD interfaces for your Doctrine entities from simple configuration. Scaffold list, create, edit, and delete views with built-in filtering, sorting, pagination, and access control, so you can ship admin backends and data management screens faster.
Architecture fit. The first and most important finding is a stack mismatch that must be resolved before any other evaluation: whatwedo/CrudBundle is a Symfony bundle, not a Laravel package. It is registered through the Symfony kernel (AppKernel/bundles.php), configured via the Symfony DI container, and depends on Symfony routing, the event dispatcher, Doctrine ORM entity metadata, and (almost certainly) Twig for rendering. Nothing about it is Laravel-native — no service providers, no facades, no Eloquent, no Blade. The package name in the brief and the repository name in the source are in direct conflict, and for a Laravel-targeted decision the honest answer is that architecture fit is poor to non-existent. If the intended host application is actually Symfony, the fit improves substantially, but only for legacy Symfony 2.8/3.x-era codebases.
Integration feasibility. The last release is October 2017 — roughly eight years stale. A bundle of that vintage will typically declare php: ^5.5|^7.0 and symfony/symfony: ~2.8|~3.0 constraints, which are not installable alongside PHP 8.2+ and Symfony 6/7 without a fork. Modern Composer will refuse the dependency resolution outright, so integration is not a configuration exercise; it is a porting project. Composer's --ignore-platform-reqs is not a mitigation here — the runtime API surface (ContainerAware, getContainer(), possibly removed Doctrine EntityManager methods, Twig 1.x APIs) is incompatible, not merely gated. Feasibility is therefore conditional and low: viable only as a read-only reference implementation for ideas, not as an installable dependency.
Technical risk. High across every axis:
Key questions.
composer.json, and does a fork to Symfony 6/7 + PHP 8.2 look like days or weeks of work?Stack fit. None for Laravel. For a Symfony shop, fit is limited to legacy 2.8/3.x applications already on Doctrine and Twig; even there, it competes with first-party symfony/maker-bundle CRUD generation, which is maintained and produces idiomatic, ownable code. The strategic recommendation is to not integrate this package and instead capture the underlying requirement — "scaffold CRUD quickly for a prototype" — against maintained alternatives.
Migration path. There is no credible upgrade path into the package; the only realistic path is out of it. If the organisation already has a 2017-era Symfony application using this bundle, the migration is: (1) freeze and inventory the entities and routes it serves, (2) replace generated controllers with explicit, tested controllers or with EasyAdmin/API Platform, (3) delete the bundle and its stale transitive dependencies, (4) run a dependency audit before and after to prove the CVE reduction. Plan this as a scoped, time-boxed removal, not a modernization of the bundle itself.
Compatibility. Assume incompatible with PHP ≥ 7.4 and Symfony ≥ 4. A compatibility spike should be strictly read-only: install into a disposable symfony/skeleton at the version pinned by its composer.json, and only then determine whether a fork is cheap. Do not attempt to install it into the current production application to "see what happens" — dependency resolution failure is the likely outcome, and platform-req bypasses invite silent runtime breakage.
Sequencing. Run a two-day timeboxed spike in an isolated container, in parallel with a one-day evaluation of MakerBundle/EasyAdmin (Symfony) or Filament/Nova/Backpack (Laravel). Compare on: time-to-first-working-screen, generated-code quality, test story, and maintenance owner. Decide at the end of the spike and record the decision. If the spike is inconclusive, the default is no — the asymmetry of a stale dependency in a production path is not worth a marginal prototyping gain.
Maintenance. The organisation becomes the de facto maintainer on day one. Any PHP or Symfony upgrade in the host application forces a corresponding patch to a fork you now own. Budget for a named owner and a quarterly triage; without that, the fork silently rots and becomes a harder version of the problem you started with.
Support. No vendor, no SLA, no active maintainer, and a negligible community. Internal engineers will be the only support channel, and the pool of people who have ever seen this bundle is effectively the nine stargazers. Onboarding cost is high relative to the size of the codebase because there is no prior art to consult.
Scaling. Prototyping CRUD scaffolds rarely encode the things that matter at scale: N+1 query avoidance, pagination on large tables, index-aware filtering, authorization per field, audit logging, and API versioning. Expect to rewrite the hot paths once traffic arrives. The bundle does not create a scaling ceiling so much as a scaling rewrite.
Failure modes.
composer update in the host app becomes unresolvable because the bundle pins ancient versions.Ramp-up. Learning the bundle itself is perhaps a day — it is small. Ramp-up on the consequences (a pinned legacy toolchain, a fork to maintain, an unfamiliar 2017 idiom set) is measured in weeks and lands on whoever inherits the codebase. That asymmetry — trivial to adopt, expensive to escape — is the defining operational characteristic and the strongest argument for declining the dependency in favour of maintained scaffolding that emits code the team fully owns.
How can I help you explore Laravel packages today?