This module provides a full page cache solution for Zend Framework 2.
Installation of StrokerCache uses composer. For composer documentation, please refer to getcomposer.org.
-
cd my/project/directory
-
create or modify the
composer.json
file within your ZF2 application file with following contents:{ "require": { "stroker/cache": "*" } }
-
install composer via
curl -s https://getcomposer.org/installer | php
(on windows, download https://getcomposer.org/installer and execute it with PHP). Then runphp composer.phar install
-
open
my/project/directory/configs/application.config.php
and add the following key to yourmodules
:'StrokerCache',
Copy the file strokercache.local.php.dist
to your config/autoload directory and rename to strokercache.local.php
. Edit this file to reflect your needs.
The module provides several strategies to determine if a page should be cached.
- By routename
- By controller classname
- By regex on the URI
- Disable caching for authenticated users
Caching the home route:
<?php
return array(
'strokercache' => array(
'strategies' => array(
'enabled' => array(
'StrokerCache\Strategy\RouteName' => array(
'routes' => array(
'home'
),
),
),
),
),
);
Caching the foo/bar
route, but only for a GET request and only when the param id
equals 60
<?php
return array(
'strokercache' => array(
'strategies' => array(
'enabled' => array(
'StrokerCache\Strategy\RouteName' => array(
'routes' => array(
'foo/bar' => array(
'http_methods' => array('GET'),
'params' => array('id' => 60)
)
),
),
),
),
),
);
Storage adapter can be changed by configuration. Configuration structure is the same a StorageFactory consumes. See the ZF2 reference guide. By default filesystem storage is used.
Example using APC:
<?php
return array(
'strokercache' => array(
'storage_adapter' => array(
'apc'
),
),
);
You can invalidate cache items using the provided console route.
Alternatively you could pull strokercache_service
from the servicelocator and call clearByTags
directly from you application (i.e. from an event listener).
Run the following command from your project root:
php public/index.php strokercache clear <tags>
Multiple tags can be seperated by a ,
.
Every page which is cached by StrokerCache is identified using the following tags:
route_<routename>
: Contains the matched routename of the pagecontroller_<controllername>
: Contains the controllernameparam_<paramname>_<paramvalue>
: One tag for every route param
To clear every page renderered by the someAction
in MyNamespace\MyController
do the following:
php public/index.php strokercache clear controller_MyNamespace\MyController,param_action:some
To clear the route with alias player
but only for the player with id 60.
php public/index.php strokercache clear route_player,param_id_60
You can create your own strategies by implementing the StrokerCache\Strategy\StrategyInterface. Now register your strategy to the pluginManager:
<?php
return array(
'strokercache' => array(
'strategies' => array(
'plugin_manager' => array(
'invokables' => array(
'MyNamespace\MyCustomStrategy'
),
),
),
),
);
Next you need to enable the strategy
<?php
return array(
'strokercache' => array(
'strategies' => array(
'enabled' => array(
'MyNamespace\MyCustomStrategy'
),
),
),
);
The cache service triggers several events you can utilize to add some custom logic whenever saving/loading the cache happens. The events are listed as constants in the CacheEvent class:
EVENT_LOAD
: triggered when the requested page is found in the cache and ready to be served to the clientEVENT_SAVE
: triggered when your page is stored in the cache storageEVENT_SHOULDCACHE
: this event is used to determine if a page should be stored into the cache. You can listen to this event don't want the page to be cached at an early stage.
TODO add some examples