sinsquare / silex-doctrine-cache-provider
Doctrine cache provider for Silex framework
Installs: 1 517
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 3
Forks: 0
Open Issues: 0
Requires
- php: ~5.6|~7.0
- doctrine/cache: ^1.0
- pimple/pimple: ~3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- phpunit/phpunit: ^5.7
README
Installation
With composer :
{ "require": { "sinsquare/silex-doctrine-cache-provider": "1.*" } }
Usage
You can use the provider with Pimple or Silex.
First you have to create the condig for the cache, than you have to register the DoctrineCacheServiceProvider.
<?php use SinSquare\Cache\DoctrineCacheServiceProvider; $container = new Container(); $container['doctrine.cache.options'] = array( 'providers' => array( 'cache_name_1' => array( 'type' => 'void', ), ), ); $container->register(new DoctrineCacheServiceProvider());
To access a cache, you can either get if with the $container['doctrine.caches'][] or with $container['doctrine.cache.<cache_name>']
<?php $container['doctrine.cache.options'] = array( 'providers' => array( 'cache_name_1' => array( 'type' => 'void', ), ), ); $container->register(new DoctrineCacheServiceProvider()); $cache = $container['doctrine.caches']['cache_name_1']; //OR $cache = $container['doctrine.caches.cache_name_1'];
Options
Available cache types:
APC
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'apc' ), ), );
APCu
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'apcu' ), ), );
Array
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'array' ), ), );
Chain
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'chain', 'caches' => array('cache_1', 'cache_2') ), 'cache_1' => array( 'type' => 'array' ), 'cache_2' => array( 'type' => 'apc' ), ), );
Filesystem
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'filesystem', 'directory' => 'dir', 'extension' => 'value' //optional 'umask' => 'value' //optional ) ), );
Filesystem
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'filesystem', 'directory' => 'dir', 'extension' => 'value' //optional 'umask' => 'value' //optional ) ), );
PHP file
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'phpfile', 'directory' => 'dir', 'extension' => 'value' //optional 'umask' => 'value' //optional ) ), );
Memcache
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'memcache', 'host' => 'host', 'port' => 'port' ) ), );
Memcached
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'memcached', 'host' => 'host', 'port' => 'port' ) ), );
Void
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'void' ) ), );
Creating custom cache
For creating a new cache provider all you have to do is the following:
- create the new CacheType
- define the $container['doctrine.cache.factory.']
- use the new provider in the config
Creating the new Cache type
<?php namespace Your\Name\Space; use Doctrine\Common\Cache\CacheProvider; class MyCustomCache extends CacheProvider { //class body with the required methods and functionality }
Create a factory for it
//you have to define this BEFORE you get a new cache, preferably before registering the provider $container['doctrine.cache.factory.customcache'] = $container->protect(function ($cacheOptions) use ($container) { $namespace = $cacheOptions["namespace"]; // return new MyCustomCache(); });
Use it
$container['doctrine.cache.options'] = array( 'providers' => array( 'cache' => array( 'type' => 'customcache' ) ), ); //getting the cache is the same as before