fyennyi / async-cache-bridge-symfony
Symfony bridge for Fyennyi AsyncCache.
Fund package maintenance!
Patreon
Open Collective
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/fyennyi/async-cache-bridge-symfony
Requires
- php: ^8.1
- fyennyi/async-cache-php: ^1.1
- symfony/framework-bundle: ^6.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^12.5
README
This is a Symfony Bridge for the Async Cache PHP library. It integrates the asynchronous caching manager directly into your Symfony application, automatically wiring it with the default Symfony Cache, Lock, and Logger components.
Features
- Automatic Service Registration: Registers
AsyncCacheManageras a service in the container. - Seamless Integration: Automatically injects:
cache.app(Your default Symfony cache pool).lock.factory(Symfony Lock component for atomic operations).logger(Monolog integration).event_dispatcher.
- Configuration Friendly: Allows defining global strategies via
yamlconfiguration.
Installation
Run the following command in your terminal:
composer require fyennyi/async-cache-bridge-symfony
If you are not using Symfony Flex, you may need to register the bundle manually in config/bundles.php:
// config/bundles.php return [ // ... Fyennyi\AsyncCache\Bridge\Symfony\AsyncCacheBundle::class => ['all' => true], ];
Configuration
You can configure the default behavior of the cache manager in config/packages/async_cache.yaml.
# config/packages/async_cache.yaml async_cache: # Set the default strategy for cache misses (strict, background, etc.) # Default is 'strict' default_strategy: strict
Usage
Injecting the Manager
The bridge registers the Fyennyi\AsyncCache\AsyncCacheManager class in the service container. You can use dependency injection to access it in your Controllers or Services.
namespace App\Service; use Fyennyi\AsyncCache\AsyncCacheManager; use Fyennyi\AsyncCache\CacheOptions; class WeatherService { public function __construct( private AsyncCacheManager $cache ) {} public function getForecast(string $city): \React\Promise\PromiseInterface { return $this->cache->wrap( 'weather_' . $city, fn() => $this->fetchFromApi($city), new CacheOptions(ttl: 300) ); } private function fetchFromApi(string $city) { /* ... */ } }
Requirements
Since this bridge automatically wires Symfony components, ensure your environment has the necessary services configured:
- Cache: A configured
cache.apppool (standard in Symfony). - Lock: The
symfony/lockcomponent (recommended for atomic operations).
composer require symfony/lock
Contributing
Contributions are welcome! Please follow these steps:
- Fork the project.
- Create your feature branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
License
This library is licensed under the CSSM Unlimited License v2.0 (CSSM-ULv2). See the LICENSE file for details.