softspring/crudl-bundle
Softspring CRUDL Bundle gives Symfony applications a reusable foundation for building CRUDL interfaces: create, read, update, delete, and list. It streamlines admin panels and entity management with configurable controllers and services, reducing boilerplate for common backend operations.
Framing note: softspring/crudl-bundle is a Symfony bundle, not a Laravel package — there is no service provider, no config/crudl.php, and no Artisan command. "Day-to-day" here means Symfony controllers, Doctrine, Symfony Forms and Twig. If you are in a Laravel codebase, this package is not the right tool.
composer require softspring/crudl-bundle and enable it in config/bundles.php (Flex recipe normally handles both).EntityManagerInterface), Symfony Forms, Twig, and a paginator integration.CrudlController base class and its per-action configure* methods. That is the entire contract — everything else is convention.getEntityClass(), getFormTypeClass(), getBaseRouteName()), point routing at it, and you get list/create/read/update/delete for free.^5.6 and read the actual compare diff (v5.5.10...v5.6.0) before assuming it is a safe drop-in.listAction override.isGranted) inside the configurators or via route-level #[IsGranted]. Per-action toggling is cleaner than one big voter for the whole controller.@SoftspringCrudl/... for anything you don't override. Prefer per-controller overrides over editing vendor templates.getBaseRouteName() collisions are the #1 source of confusing bugs. Route names are derived from it; two controllers with overlapping prefixes will silently shadow each other. Verify with bin/console debug:router.refresh() and about not holding the EM across actions.AbstractType. Passing a Laravel-style form request or a validated DTO will not work; the form factory expects a real form type with a configured data_class.debug:container to confirm the bundle's services registered, debug:router for route wiring, and the Symfony profiler for the Doctrine queries each action emits. Nearly every "CRUDL is slow/wrong" report resolves to an N+1 in a list query or a misconfigured filter form.^5.6 rather than a floating ^5, and re-read the diff on each minor bump.How can I help you explore Laravel packages today?