rz/admin-bundle
rz/admin-bundle is a Laravel admin package that helps you set up and manage administrative interfaces. It bundles common admin panel components and resource-management tooling so you can scaffold backend screens faster with less boilerplate. Designed for PHP/Laravel projects.
First, the framework mismatch. rz/admin-bundle is a Symfony bundle, not a Laravel package. There is no service provider, no publishable config/admin.php, and nothing to php artisan. There is no adapter that makes this drop-in for Laravel — "leveraging" it means either maintaining a legacy Symfony 2.x / RZ Project CMS deployment, or reading it as reference material for how an admin layer is structured. Do not plan on the former unless you already own the codebase.
Where to look first, in this order:
composer.json — the require block is your whole compatibility story. Note the symfony/* pins and PHP floor; if it targets ~2.x, expect composer require to fail resolution against any current project before you reach a runtime error.DependencyInjection/RZ*Extension.php and Configuration.php — the real config API. Every knob the bundle accepts lives in the config tree; treat it as your documentation substitute.Resources/config/services.yml — the wiring. Tells you which services are public, which are tagged for auto-registration, and what the bundle assumes about Doctrine.Controller/ and Resources/views/ — the actual admin screens and the Twig blocks you'd override.Resources/doc/ or root README.md — if present; expect thin, stale, or absent.Minimal boot check (legacy Symfony skeleton only):
composer create-project symfony/skeleton:"<matching version>" admin-sandbox
composer require rz/admin-bundle # expect conflicts; use --ignore-platform-reqs only to read the errors
Register the bundle in app/AppKernel.php (or config/bundles.php on newer Symfony), import its routing under an /admin prefix, then:
bin/console debug:router | grep -i admin
That dashboard route is your first use case: confirm the shell renders before wiring a single entity to it. If the dashboard 500s on a clean install, stop — an archived bundle you can't even boot isn't worth debugging.
CRUD-over-entities is the core pattern. The bundle exposes an "admin resource" concept: you point it at a Doctrine entity (via annotation, YAML/PHP config, or a tagged service), and it derives list/create/edit/delete screens from Doctrine metadata and validation constraints. The day-to-day workflow is:
Config over inheritance. Prefer the bundle's config tree for field labels, ordering, and which properties are listable. Reach for template overrides only when the config tree has no knob — in an archived bundle, the config layer is the part least likely to break under a minor Symfony upgrade, and fork-patched templates are the part most likely to.
Template override layering. Symfony resolves overrides by bundle path, so the standard escape hatch is:
templates/bundles/RZAdminBundle/<Controller>/<template>.html.twig # modern
app/Resources/RZAdminBundle/views/<Controller>/<template>.html.twig # legacy
Copy the vendor template, change one block, leave the rest untouched. Never edit vendor/ — you will lose the change on the next composer install, and there is no upstream to accept a patch.
Auth integration. The bundle does not ship an auth system; it hooks into whatever the host application already has (SecurityContext, role hierarchy, voters). Wire your existing guard and policies, and treat the bundle's default admin routes as needing an explicit firewall rule. There is no security maintenance behind this bundle, so your firewall config is the only thing standing between an unmaintained admin surface and the internet.
If you're actually on Laravel: the only defensible pattern is scavenging. Read the controller structure and the resource-registration model as a design reference, then implement natively against Filament or Nova resources. Do not attempt to port the Symfony service container; write your own contracts.
composer.json pins the entire application to an EOL runtime. This is the highest-probability near-term cost, and it will surface as an unrelated dependency update failing resolution — not as a clean error where you expect it.local.debug:container and debug:router, not with logs. Since there's no maintainer to ask, bin/console debug:container --tag=<tag> is how you discover which services are actually registered and which tags the bundle relies on.How can I help you explore Laravel packages today?