tito10047 / persistent-preference-bundle
Provides a unified API for handling persistent user preferences, UI states, and settings across different storage adapters (Doctrine, Session, Redis).
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Type:symfony-bundle
pkg:composer/tito10047/persistent-preference-bundle
Requires
- php: >=8.1
- symfony/framework-bundle: ^6.4|^7.4|^8.0
- symfony/property-access: ^6.4|^7.4|^8.0
Requires (Dev)
- dama/doctrine-test-bundle: ^8.4
- pagerfanta/pagerfanta: ^3.6
- phpunit/phpunit: ^10.5
- symfony/asset-mapper: ^6.4|^7.4|^8.0
- symfony/dotenv: ^6.4|^7.4|^8.0
- symfony/http-client: ^6.4|^7.4|^8.0
- symfony/maker-bundle: ^1.39
- symfony/orm-pack: ^2.5
- symfony/phpunit-bridge: ^6.4|^7.4|^8.0
- symfony/profiler-pack: ^1.0
- symfony/runtime: ^6.4|^7.4|^8.0
- symfony/serializer-pack: ^1.3
- symfony/stimulus-bundle: ^2.31
- symfony/translation: ^6.4|^7.4|^8.0
- symfony/twig-bundle: ^6.4|^7.4|^8.0
- symfony/uid: ^6.4|^7.4|^8.0
- symfony/yaml: ^6.4|^7.4|^8.0
- zenstruck/foundry: 2.6
This package is auto-updated.
Last update: 2025-12-08 13:29:00 UTC
README
🛒 Persistent Preference Bundle
persistent_preference: managers: default: storage: 'persistent_preference.storage.session' my_pref_manager: storage: 'app.persistent_preference.storage.doctrine' storage: doctrine: id: 'app.persistent_preference.storage.doctrine' enabled: true preference_class: App\Entity\UserPreference entity_manager: 'default' context_providers: users: class: App\Entity\User prefix: 'user' companies: class: App\Entity\Company prefix: 'company' identifier_method: 'getUuid'
namespace ; use \Symfony\Component\DependencyInjection\Attribute\Autowire; use \App\Entity\User; use \App\Entity\Company; class Foo{ public function __construct( private readonly PreferenceManagerInterface $sessionPrefManager #[Autowire('persistent_preference.manager.my_pref_manager')] private readonly PreferenceManagerInterface $doctrinePrefManager, private readonly EntityManagerInterface $em ) {} public function bar(User $user, Company $company){ $userPref = $this->sessionPrefManager->getPreference($user); $companyPref = $this->doctrinePrefManager->getPreference($company); $userPref->set('foo', 'bar'); $userPref->set('baz', [1,2,3]); $companyPref->set('foo2', 'bar'); $companyPref->set('baz2', [1,2,3]); $em->flush(); $foo = $userPref->get('foo'); $baz = $userPref->get('baz'); $foo2 = $companyPref->get('foo2'); $baz2 = $companyPref->get('baz2'); } }
<div> User Foo: {{ preference(user, 'foo') }}<br> Company pref: {{ company|pref('foo2') }} </div>
Console command: debug:preference
Inspect stored preferences for a specific context directly from CLI.
Usage:
php bin/console debug:preference "user_15" --manager=my_pref_manager
Output example:
Context: user_15
Storage: doctrine
+-------+-------+
| Key | Value |
+-------+-------+
| theme | dark |
| limit | 50 |
+-------+-------+
Notes:
- The
contextargument accepts either a pre-resolved key likeuser_15or any object supported by your configured context resolvers. - The
--manageroption selects which preference manager to use. It maps to the service idpersistent_preference.manager.{name}and defaults todefaultwhen omitted. - The Storage line reflects the underlying storage:
session,doctrine, or the short class name for custom storages. - Non-scalar values are JSON-encoded for readability;
nulland booleans are rendered asnull,true/false.