tourze/easy-admin-extra-bundle
A Symfony bundle that extends EasyAdmin with extra fields, filters, actions, and UI enhancements, making it easier to build richer admin backends while keeping configuration simple and consistent.
Confirm the target runtime first. tourze/easy-admin-extra-bundle follows Symfony bundle conventions (*Bundle suffix, DependencyInjection/, Resources/config/), and the easy-admin name points at EasyAdmin rather than Laravel's Nova/Filament ecosystem. Before writing a line of code, decide which of these you are actually doing:
config/bundles.php; you will need to instantiate services manually or via a small service provider.Minimal steps (Composer + inspection):
composer require tourze/easy-admin-extra-bundle:^1.0
Then, before integrating:
composer.json for require/require-dev — note the minimum PHP version and whether symfony/framework-bundle or easycorp/easyadmin-bundle are hard requirements (which would rule out option 1).DependencyInjection/Extension.php and Configuration.php — that is the authoritative list of every config key the bundle accepts. Vendor READMEs in 1.0.0 releases are frequently thinner than the config tree.composer.lock-adjacent changelog: https://github.com/tourze/easy-admin-extra-bundle/compare/0.1.2...1.0.0 is the only release artefact for 1.0.0, so the diff itself is the changelog. Skim it for renamed classes, removed services, and bumped dependency constraints.First use case: wire the bundle's admin "extra" surface into a single CRUD screen end-to-end — one entity, one index/detail view, one custom action — and confirm the extension hooks fire. Do not attempt a full admin migration until that single screen behaves.
Register, then configure, then extend. The bundle's value is in its extension points, not its defaults. The working order is:
Configuration.php reading — the defaults are usually tuned for the maintainer's own apps.Keep the bundle at arm's length behind your own abstraction. Because 1.0.0 is the first stable release and the 0.x line went through at least three patch releases, treat the public API as stable-but-young. Wrap calls in a thin service of your own (e.g. App\Support\AdminExtras) so a future 1.1 rename does not ripple through every controller.
Composer constraint strategy. Pin ^1.0 rather than ~1.0.0 to receive patches, but commit composer.lock and review lock diffs on every composer update — a 0.x → 1.0 jump from this maintainer frequently ships with sibling tourze/* packages that move in lockstep. If you see unexpected transitive upgrades, that is the cause.
Testing pattern. Instantiate the bundle's services directly in a unit test rather than boot-testing the whole kernel. Symfony bundles of this shape are usually plain services with no container magic beyond autowiring, so a container-less test gives you fast feedback on the extension hooks.
Integration tip for Laravel users: put the bridge in a dedicated service provider and bind the bundle's classes as singletons. Mark the provider defer-able so apps that never touch the admin surface do not pay the boot cost.
ServiceProvider, no config/*.php publish tag, no facades. Any tutorial you find for Laravel packages will mislead you here. Expect services.yaml, XML/YAML service definitions, and constructor autowiring.config/bundles.php (or your manual bindings are incomplete), you get "service not found" rather than a helpful error. When debugging, run bin/console debug:container <service-id> first — it distinguishes "not registered" from "registered but misconfigured."Configuration.php usually rejects unknown keys outright. If you copy a config block from an older tutorial, expect a hard failure naming the offending key. Cross-check against the Configuration.php in the installed version, not the docs.Resources/public and Resources/views. They are only copied out on an explicit publish/install command; edits to the vendor copy will be lost on the next composer update. Always override in your app, never in vendor/.tourze/* packages habitually depend on each other. A version constraint conflict on one will silently constrain the others; if composer require resolves an older-than-expected version, run composer why-not tourze/easy-admin-extra-bundle 1.0.0 to find the blocker.require.php. Version jumps of this kind often accompany a minimum-PHP bump, which is the single most common cause of "works locally, fails in CI" for bundles like this.How can I help you explore Laravel packages today?