raindrop/sonata-theme-bundle
A Symfony bundle that adds a polished, responsive theme to Sonata Admin. It provides custom templates and styles to modernize admin dashboards, lists, forms, and CRUD screens, making Sonata-based backends cleaner and easier to use.
First, calibrate expectations: this is a Symfony bundle (RaindropSonataThemeBundle) that themes sonata-project/admin-bundle. It is not a Laravel package — there is no service provider, no config/sonata-theme.php, and no Blade views. A Laravel developer should treat it as a design reference and template source, not a dependency to composer require into an existing Laravel app.
Where to look first, in order:
composer.json — read the require block. Confirm the Symfony and sonata-project/admin-bundle version constraints it targets. This tells you whether the templates are compatible with the Sonata version you might be evaluating.Resources/views/ — the Twig templates that override Sonata's default admin layout (dashboard, list, show, edit, form).Resources/public/ — CSS/JS/SCSS assets that define the visual theme; these are the most portable piece for a Laravel project.DependencyInjection/ and RaindropSonataThemeBundle.php — see whether it only ships templates or also registers services/compiler passes.Resources/config/ YAML — the theme likely expects to be wired into sonata_admin config.Minimal Symfony-side install (for evaluation only):
composer require raindrop/sonata-theme-bundle
# register in config/bundles.php
# wire theme in config/packages/sonata_admin.yaml (templates/assets)
bin/console assets:install --symlink
bin/console cache:clear
First use case: load a Sonata dashboard and confirm the Raindrop skin is applied (colors, nav, login page). If you are in Laravel, the first equivalent use case is exporting the SCSS/CSS into resources/css and reproducing the layout in Blade (or in Filament/Inertia) — you are porting the design, not the bundle.
Symfony / Sonata integration (the intended path):
sonata_admin template keys at the bundle's Twig files, e.g. sonata_admin.templates.layout, dashboard, list, show, edit. Check the bundle's README for the exact map; if absent, diff its Resources/views/ against vendor/sonata-project/admin-bundle/src/Resources/views/.public/bundles/raindropsonatathemebundle/ with assets:install, then either let Symfony serve them or pull them through Webpack Encore for versioning. Do not edit files under vendor/ or public/bundles/ directly — they are regenerated.{% block %}s in your app's templates so upgrades to the bundle don't collide with your customizations.@RaindropSonataTheme/... namespacing to extend individual templates.Laravel-side patterns (realistic day-to-day):
resources/css/theme/ and configure Tailwind theme.extend from them. This is where the package actually earns its 0.75 "opportunity" score.<x-admin.layout>, <x-admin.sidebar>), mirroring the Twig block structure. Keep them as partials so they compose like Twig blocks.->colors([...]) and a custom panel.css) rather than copying HTML.resources/css/app.css imports and build with Vite; do not reference public/bundles/... URLs from a Laravel app.Suggested workflow: clone the repo into a throwaway Symfony project → apply the theme → screenshot every admin page → port tokens and layout to your Laravel admin stack. Keep the Symfony install strictly for visual reference.
composer require it in laravel/laravel. Vendor it as a reference or extract assets only.sonata_admin config keys). Verify the constraint in composer.json matches the Sonata version whose templates you are reading; otherwise the "theme" is for a different admin UI.Resources/views and the bundle class yourself; do not plan on upstream support or a changelog.assets:install --symlink plus cache:clear is usually required after any template/asset change. A stale Twig cache will hide your overrides.bin/console debug:twig shows which template file actually resolves for a given name — use it to confirm the Raindrop override is winning over Sonata's default. var/log/dev.log and dump() in Twig catch most layout errors.config/packages/sonata_admin.yaml, not Laravel's config/*.php. Don't look for a Laravel-style published config file.sonata_admin.templates config map, and getParent() bundle inheritance. Everything else is CSS.resources/views (Blade will not parse them) and instead translate block-by-block. Treat Twig as the spec, Blade as the implementation.LICENSE before copying large template/CSS chunks into a commercial codebase.How can I help you explore Laravel packages today?