oops / cache-factory
Simple cache factory extension for Nette.
Installs: 2 464
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 3
Forks: 1
Open Issues: 0
Requires
- php: >= 5.6.0
- nette/caching: ~2.2
- nette/di: ~2.2
Requires (Dev)
- jakub-onderka/php-parallel-lint: ~0.8
- mockery/mockery: ~0.9
- nette/bootstrap: ~2.2
- nette/tester: ~1.0
This package is auto-updated.
Last update: 2022-02-01 12:48:48 UTC
README
⚠️ THIS PACKAGE IS NO LONGER MAINTAINED. You can use contributte/cache instead.
Caching is a very common task in web development. The current practice of creating Cache
instances in Nette is to enumerate IStorage
as a dependency and create the Cache
by hand, as seen in the docs. This, however, makes unit testing classes that depend on cache a pain in the you-know-what. You either need to mock the storage and go through Cache
code to find what methods are called upon the storage, or use some autoloading magic. I don't think either way is a good one to go. I've found myself writing a simple factory like the one in this package on every project, so I made an extension out of it.
Installation and requirements
$ composer require oops/cache-factory
Oops/CacheFactory requires PHP >= 5.6.
Usage
Register the extension in your config:
extensions: cacheFactory: Oops\CacheFactory\DI\CacheFactoryExtension
And replace all occurrences of direct Cache
instantiation with call to the factory, so that this:
class CachedFoo { private $cache; public function __construct(Nette\Caching\IStorage $cacheStorage) { $this->cache = new Nette\Caching\Cache($cacheStorage, 'namespace'); } }
becomes this:
class CachedFoo { private $cache; public function __construct(Oops\CacheFactory\Caching\CacheFactory $cacheFactory) { $this->cache = $cacheFactory->create('namespace'); } }
The factory automatically uses the storage registered in the config. To provide backwards compatibility, you can also pass to the factory an arbitrary storage, should you need it:
$cacheFactory->create('namespace', new Nette\Caching\Storages\DevNullStorage());