One does not simply cache in ZF2. The best way I’ve found is to create a factory in the Service manager to use cache.
<?php
return array(
'modules' => array(
'Application',
'Rest'
),
'module_listener_options' => array(
'config_cache_enabled' => false,
'cache_dir' => 'data/cache',
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
'module_paths' => array(
'./module',
'./vendor',
),
),
'service_manager' => array(
'factories' => array(
'ZendCacheStorageFactory' => function() {
return ZendCacheStorageFactory::factory(
array(
'adapter' => array(
'name' => 'filesystem',
'options' => array(
'dirLevel' => 2,
'cacheDir' => 'data/cache',
'dirPermission' => 0755,
'filePermission' => 0666,
'namespaceSeparator' => '-db-'
),
),
'plugins' => array('serializer'),
)
);
}
),
'aliases' => array(
'cache' => 'ZendCacheStorageFactory',
),
),
);
Above is an example of my applicaiton.config.php file. I’ve created a new StorageFactory object using the alias of “cache”. This will allow me to create a service manager alias that I can then reference in my application. The next step involves my controller and a class that is serviceManagerAware.
public function IndexAction()
{
$this->assembler = new Assembler($controller->getServiceLocator());
}
My Assembler class implements ServiceManagerAwareInterface and in the construct will simply set the service manager to the passed $sm parameter:
namespace ApplicationModelObj;
use ZendServiceManagerServiceManager;
use ZendServiceManagerServiceManagerAwareInterface;
class Assembler implements ServiceManagerAwareInterface
{
/**
* Creates the configuration for the service assembler
* @param ZendServiceManagerServiceManager $request
*/
public function __construct(ServiceManager $sm)
{
$this->setServiceManager($sm);
$this->cache = $this->getServiceManager()->get('cache');
}
public function setServiceManager(ServiceManager $sm)
{
$this->_sm = $sm;
}
public function getServiceManager()
{
return $this->_sm;
}
}
Using the cache is slightly different than ZF1. You no longer can save tags with your cache.
# Simply return a key from the cache
$result = $this->cache->getItem($key);
if (!empty($result)) {
return $result;
}
# Store a result into cache using the key, $saved will result in a boolean value.
$saved = $this->cache->addItem($key, $value);
# Tag the key when saving
$this->cache->setTags($key, array('tag1', 'tag2'));