sherlockode/configuration-bundle
A Symfony bundle for database-backed application configuration. Define typed settings, manage them through an admin-friendly interface, and retrieve values easily in services, controllers, and templates, with Doctrine persistence and caching support.
Architecture fit
The package is a Symfony bundle, not a Laravel package, and that is the single most important fact for a TPM. It has no composer.json extra.laravel block, no service provider, no facade, no publishable config/migrations — its integration surface is Symfony's DI container, Doctrine ORM entities, and Symfony console/event hooks. There is no architectural slot for it to occupy in a conventional Laravel application.
What is transferable is the design pattern, and this is where a TPM should focus leverage: a clean split between a code-declared, typed configuration schema (definitions, defaults, validation) and a database-persisted value store, fronted by a single injectable manager. That separation — schema in code, values in the DB — is the actual product decision the package encodes, and it is framework-agnostic. The package itself should be evaluated as a reference implementation and a pattern source, not as a dependency to install.
Integration feasibility Three credible paths, in ascending order of cost:
config() semantics and Laravel's container. Note that spatie/laravel-settings already occupies this space and should be benchmarked first — buying beats reimplementing if it fits.Technical risk
Key questions
spatie/laravel-settings been benchmarked first?Stack fit Conditional and narrow. It fits only a Symfony 6.4 LTS / 7.x application on PHP 8.2–8.4 with Doctrine ORM. For a Laravel 10/11 codebase on PHP 8.2+, it does not fit as an installed dependency — the fit is conceptual. Treat v0.8.0 as the viable floor for any Symfony use: it is the first release that pins the modern Symfony/PHP matrix explicitly.
Migration path
No technical migration is implied by v0.8.0 — nothing is deprecated or renamed, so there is no forced work. If we proceed on the pattern path, the migration is organisational: existing static config/*.php values and env vars move into the dynamic store domain by domain, with read-through fallback to current sources during transition. Start with one bounded, non-sensitive domain (feature flags, notification copy, contact details) — never secrets, and never values read on a hot request path without caching.
Compatibility The bundle's constraints (PHP 8.2–8.4, Symfony 6.4/7.x) are irrelevant to a Laravel install but binding if we pilot in a Symfony skeleton. Applications on Symfony 5.4 or PHP ≤8.1 are frozen on 0.7.x — flag any such consumer now. For a Laravel reimplementation, the compatibility question inverts: pin to the Laravel/PHP versions we already support and design the persisted value column types to survive future framework upgrades.
Sequencing
spatie/laravel-settings (or equivalent) against this pattern before committing to build.ConfigurationRepository interface plus a typed definition registry — so the backing store can be swapped without touching call sites.Maintenance Low churn in the upstream package (v0.8.0 changed constraints only — no runtime code, no regression surface this cycle). But as a Laravel team, we would own 100% of the glue. Budget a dependency-review pass only if we actually depend on it; if we borrow the pattern, maintenance collapses to normal application code ownership, which is the cheaper long-run position.
Support Single maintainer, no commercial backing, no LTS commitment, MIT licensed (fork-friendly). We should not place a tier-1 production dependency on this without a named internal owner and a documented fork/vendor contingency. For a Laravel shop, the support question is mostly moot — the equivalent risk sits with whichever Laravel-native package we choose instead.
Scaling Configuration reads sit on the request path. Without an application-level cache in front, every config access becomes a DB round-trip — this is the dominant scaling concern and must be designed explicitly: cache-aside with invalidation on admin write, and a request-scoped memoised manager so repeated lookups within one request do not hit the cache or DB twice. Config write volume is negligible; read volume is not.
Failure modes
Ramp-up For a Symfony team: roughly half a day to a working install and pilot domain — modest. For a Laravel team: the ramp-up is not in the package but in the decision, and should be capped as a short spike to evaluate the pattern and the Laravel-native alternatives. Recommend a spike, not a commitment, until the framework-fit question is answered.
How can I help you explore Laravel packages today?