Sometimes it can be worthwhile to cache generated data to be used across requests. There are two main methods of caching data, each suited to a specific need.
Doctrine Cache
is suitable for highly dynamic data.
Cache times should be relatively small to ensure that data remains fresh. Examples of this data include database results, entity hydration results, and fully rendered content that is ready to serve.
ConfigCache
caches static data in files to be included by PHP at runtime.
These files are generated at time of deployment and should not change during their lifetime. Examples of suitable applications here is cached routing and URL generator data.
Note: See the advanced section for more information on using
ConfigCache
.
Nice supports Doctrine's Cache component through an extension. This allows for easy storage and retrieval of generated information, using any number of cache backends.
The first step is requiring the Nice Doctrine Cache bridge in your project. You can do this by updating your
composer.json
or running composer require
at the command line.
Example composer.json
:
{
"require": {
"nice/framework": "~1.0",
"nice/doctrine-cache": "~1.0"
}
}
Then run composer update
at the command line.
Using the composer
command line tool, after installing Nice:
composer require nice/doctrine-cache:~1.0
With Doctrine Cache is installed, the next step is registering the CacheExtension
with your Nice Application.
use Nice\Extension\CacheExtension;
// ...
$app = new Application();
$app->appendExtension(new CacheExtension(array(
'connections' => array(
'default' => array(
'driver' => 'redis',
'host' => '127.0.0.1'
)
)
)));
With the above configuration, Nice will create the following service:
cache.default
is an instance of
Doctrine\Common\Cache.Using the Doctrine Cache is straightforward. Data can be stored using the save
method and retrieved using the
fetch
method.
// ...
$app = new Application();
// ...
// Configure your routes
$app->set('routes', function (RouteCollector $r) {
$r->map('/hello/{name}', null, function (Application $app, Request $request, $name) {
$cache = $app->get('cache.default');
$cache->save('last-hello', $name);
return new Response('Hello, ' . $name . '!');
});
$r->map('/last-hello', null, function (Application $app) {
$cache = $app->get('cache.default');
$name = $cache->fetch('last-hello');
if (!$name) {
return new Response('I have not said "Hello" to anyone :(');
}
return new Response('Last said hello to: ' . $name);
});
});
Powered by Codex 1.1.0