euskadi31/cache-service-provider

A Cache Service Provider for Silex 2.0, using the doctrine/cache package

v1.0 2015-06-17 14:32 UTC

This package is not auto-updated.

Last update: 2024-04-13 15:55:50 UTC


README

Build Status SensioLabsInsight

This service provider for Silex 2.0 uses the Cache classes from Doctrine Common to provide a cache service to a Silex application, and other service providers.

Install

Add euskadi31/cache-service-provider to your composer.json:

% php composer.phar require euskadi31/cache-service-provider:~1.0

Usage

Configuration

If you only need one application wide cache, then it's sufficient to only define a default cache, by setting the default key in cache.options.

The cache definition is an array of options, with driver being the only mandatory option. All other options in the array, are treated as constructor arguments to the driver class.

The cache named default is the cache available through the app's cache service.

<?php

$app = new Silex\Application;

$app->register(new \Euskadi31\Silex\Provider\CacheServiceProvider, [
    'cache.options' => [
        'default' => [
            'driver' => 'apc'
        ]
    ]
]);

The driver name can be either:

  • A fully qualified class name
  • A simple identifier like "apc", which then gets translated to \Doctrine\Common\Cache\ApcCache.
  • A Closure, which returns an object implementing \Doctrine\Common\Cache\Cache.

This cache is then available through the cache service, and provides an instance of Doctrine\Common\Cache\Cache:

if ($app['cache']->contains('foo')) {
    echo $app['cache']->fetch('foo'), "<br />";
} else {
    $app['cache']->save('foo', 'bar');
}

To configure multiple caches, define them as additional keys in cache.options:

$app->register(new \Euskadi31\Silex\Provider\CacheServiceProvider, [
    'cache.options' => [
        'default' => [
            'driver' => 'apc'
        ],
        'file' => [
            'driver' => 'filesystem',
            'directory' => '/tmp/myapp'
        ],
        'global' => [
            'driver' => function() {
                $redis = new \Doctrine\Common\Cache\RedisCache;

                $redis->setRedis($app['redis']);

                return $redis;
            }
        ]
    ]
]);

All caches (including the default) are then available via the caches service:

$app['caches']['file']->save('foo', 'bar');

License

CacheServiceProvider is licensed under the MIT license.