jbtronics/settings-bundle
Symfony bundle for managing typed application settings with a clean PHP API, Doctrine storage, validation, and DI integration. Define settings as classes, inject them anywhere, and edit values via forms or CLI.
Architecture fit — unchanged, still poor: this is a Symfony bundle, not a Laravel package. jbtronics/settings-bundle integrates at the Symfony kernel level: bundle registration in config/bundles.php, a DI extension exposing a Configuration tree, compiler passes, tagged services, Doctrine ORM entities for persistence, Symfony Forms + Twig for the admin editing UI, and Symfony Validator/Serializer for typed values. Laravel has no equivalent of any of these layers — no bundle system, no container compilation phase, no config tree, no Doctrine entity manager by default. There is no supported boot path for this package inside a Laravel application. v5.0.0 does nothing to change this; if anything it tightens the coupling (see below).
What v5.0.0 actually changes — and why it matters to the decision.
ParameterMetadata::getPHPType() now returns symfony/type-info Type objects rather than strings. This is a hard BC break in a metadata API — exactly the surface a polyglot consumer or an admin/read API would touch if it introspected settings types. Any code that formatted, compared, or serialized that string will break silently or loudly depending on typing.Integration feasibility — the same three options; v5.0.0 makes two of them worse.
symfony/form, twig, doctrine/orm, symfony/validator, and now symfony/type-info), and the PHP 8.2+/Symfony 7.4+ floor narrows your upgrade headroom further.type-info change is a direct hit on any settings-metadata introspection you expose, and the Symfony 7.4 floor forces the satellite service onto a current (and faster-moving) Symfony major.spatie/laravel-settings as the near 1:1 Laravel analog (typed settings classes, per-group migrations, encrypted casts, cached repository), with laravel/pennant if the "settings" are really flags.Technical risk — high, and the release nudges it upward.
Key questions for the team.
ParameterMetadata::getPHPType() or otherwise depend on its string return?Stack fit. Still Symfony 7.4+ only, now with a PHP 8.2+ floor. For a Laravel codebase the mapping is unchanged: spatie/laravel-settings for typed settings with Eloquent-backed persistence, laravel/pennant for feature-flag-shaped "settings," or config/ plus a thin repository for static values. None require a second framework, and none inherit the Symfony 7.4 upgrade treadmill.
Migration path.
type-info adoption, and a re-verification pass on every future bundle major.Compatibility. If the polyglot route is approved, pin the shared contract on the database schema and the HTTP payload shape, never on package internals — v5.0.0 proves the point by changing a metadata return type in place. Budget for doctrine/dbal/orm alignment, symfony/type-info availability, and PSR version conflicts if the stacks ever share a composer.json. Confirm PHP constraint overlap early: PHP 8.2+ is now required on both sides, and Symfony 7.4 becomes a floor for the satellite service.
Sequencing.
spatie/laravel-settings against the top three settings use cases — one day.ParameterMetadata internals.Maintenance. Single-maintainer dependency with a thin user base; assume you may need to fork. v5.0.0 confirms the upgrade shape: each Symfony major becomes your release, and BC breaks can land in accessor-level APIs rather than in clearly-scoped majors. The Laravel-native alternative moves this maintenance onto a well-resourced package with broad adoption and no framework-floor surprises.
Support. MIT, community-only, no SLA, no vendor channel. Issue responsiveness remains unverified, and a major release with a hard platform floor and a breaking metadata change is exactly when you would want a support channel to exist.
Scaling. The bundle caches resolved settings and hits the DB on cache miss — fine at typical volumes. The polyglot variant is where scaling degrades: two services reading the same tables, cross-service cache invalidation, shared encryption key material, and now a forced Symfony 7.4 upgrade cadence on the satellite.
Failure modes to plan for.
ParameterMetadata::getPHPType() after v5.0.0 — string concatenation, comparison, or serialization against a Type object.Ramp-up. For a Laravel team, becoming productive in Symfony DI, compiler passes, and Forms remains a multi-week investment before the first settings change ships — recurring, not one-time, and now with an added "keep current on Symfony majors" obligation. The TPM recommendation is unchanged and reinforced: decline adoption of this package for the Laravel estate, and reuse its typed-settings model as a specification rather than a dependency.
How can I help you explore Laravel packages today?