jordillonch/crud-generator
A Laravel CRUD generator that scaffolds models, controllers, views, and routes from database tables, helping you quickly build admin panels and data-management interfaces with less repetitive boilerplate code.
First step: verify you can install it — you can't, on Laravel. Before anything else, run composer require jordillonch/crud-generator and read the failure. You'll get a resolution error because the package's composer.json targets symfony/symfony 2.x (plus Doctrine, Twig, KnpPaginatorBundle, and sensio/framework-extra-bundle), all of which conflict with Laravel 10/11's php: ^8.1 and Symfony 6/7 component constraints. That error is the correct outcome — it stops you from building a shim around a bundle that has no place in a Laravel kernel.
Where to look first. Clone the repo and open two things: the generator Command class (the class in Command/ that does the scaffolding) and the Resources/skeleton/ templates it copies. Those two files tell you the entire information architecture — what a generated list view looks like (columns, pagination controls, filter row), what a generated form looks like (field widgets per column type), and how translations are wired. That is the only durable asset in the package.
The realistic first use case. You are a Laravel developer, so your first "use case" is a read, not a run:
blueprint/infyom/laravel-generator already cover this ground with active maintenance.The only legitimate install path is a brownfield Symfony 2.8 app in maintenance-only mode: register the bundle in AppKernel::registerBundles(), import its routing, configure Doctrine entities, then invoke its generator command against an existing entity. If you do not have that estate, stop here and treat the repo as a design reference.
Pattern 1 — Legacy Symfony2 scaffolding (the only runtime pattern). The bundle's happy path is: define a Doctrine entity → run the bundle's CRUD command → it emits a controller, a Symfony Form type, Twig list/show/new/edit templates, and translation entries. You then customize the generated files. Day-to-day, this is a one-shot generator; you do not depend on it at request time.
Pattern 2 — Pattern harvest → Laravel native generator. This is the recommended path for a Laravel developer. Extract the view-shape decisions and reimplement as an Artisan command with published stubs. Map every layer:
| Generator concern | Symfony2 source | Laravel target |
|---|---|---|
| Persistence | Doctrine annotations | Eloquent model + $casts |
| Forms/validation | Symfony Form component | FormRequest + Blade components |
| Templates | Twig | Blade + published stubs |
| Pagination | KnpPaginatorBundle | LengthAwarePaginator |
| i18n | Symfony Translator, XLIFF | lang/*.php + __() |
| Routing | YAML + @Route annotations |
routes/web.php |
| UI | Bootstrap 2.2.2 | Bootstrap 5 / Tailwind |
Pattern 3 — Copy the feature checklist, not the code. The package's feature set (paginated list, filterable columns, translatable labels, auto-generated forms) is a legitimate acceptance-criteria list when evaluating Filament or a thin in-house generator. Use it to score candidates; do not use it to justify a port.
Pattern 4 — If you insist on a port. Scope it as a greenfield package: a single Artisan command with --model, --fields, --with-filter flags, publishable stubs, and golden-file snapshot tests to catch stub drift in CI. Budget days, not hours, and expect to own it entirely — you inherit no test suite or maintenance capacity from upstream.
Kernel, compiler passes, @Template annotations) has no Laravel equivalent.WHERE clauses. If you port controller logic verbatim, replace it with bound parameters and an allowlist of filterable columns. This is the single most important thing to audit before shipping anything derived from this code.lang/ namespace. Namespace them on emission (e.g. crud.<entity>.*) and check for duplicates at port time.app/Resources/CrudGeneratorBundle/...). This works, but it deepens your coupling to an EOL stack — avoid unless the app is frozen and you have no upgrade budget.How can I help you explore Laravel packages today?