public function testTagable() { if (!$this->_storage instanceof TaggableInterface) { $this->markTestSkipped("Storage doesn't implement TaggableInterface"); } $this->assertSame(array(), $this->_storage->setItems(array('key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3'))); $this->assertTrue($this->_storage->setTags('key1', array('tag1a', 'tag1b'))); $this->assertTrue($this->_storage->setTags('key2', array('tag2a', 'tag2b'))); $this->assertTrue($this->_storage->setTags('key3', array('tag3a', 'tag3b'))); $this->assertFalse($this->_storage->setTags('missing', array('tag'))); // return tags $tags = $this->_storage->getTags('key1'); $this->assertInternalType('array', $tags); sort($tags); $this->assertSame(array('tag1a', 'tag1b'), $tags); // this should remove nothing $this->assertTrue($this->_storage->clearByTags(array('tag1a', 'tag2a'))); $this->assertTrue($this->_storage->hasItem('key1')); $this->assertTrue($this->_storage->hasItem('key2')); $this->assertTrue($this->_storage->hasItem('key3')); // this should remove key1 and key2 $this->assertTrue($this->_storage->clearByTags(array('tag1a', 'tag2b'), true)); $this->assertFalse($this->_storage->hasItem('key1')); $this->assertFalse($this->_storage->hasItem('key2')); $this->assertTrue($this->_storage->hasItem('key3')); // this should remove key3 $this->assertTrue($this->_storage->clearByTags(array('tag3a', 'tag3b'), true)); $this->assertFalse($this->_storage->hasItem('key1')); $this->assertFalse($this->_storage->hasItem('key2')); $this->assertFalse($this->_storage->hasItem('key3')); }
/** * Returns the items for a given page. * * @param integer $pageNumber * @return mixed */ public function getItemsByPage($pageNumber) { $pageNumber = $this->normalizePageNumber($pageNumber); if ($this->cacheEnabled()) { $data = self::$cache->getItem($this->_getCacheId($pageNumber)); if ($data) { return $data; } } $offset = ($pageNumber - 1) * $this->getItemCountPerPage(); $items = $this->adapter->getItems($offset, $this->getItemCountPerPage()); $filter = $this->getFilter(); if ($filter !== null) { $items = $filter->filter($items); } if (!$items instanceof Traversable) { $items = new ArrayIterator($items); } if ($this->cacheEnabled()) { $cacheId = $this->_getCacheId($pageNumber); self::$cache->setItem($cacheId, $items); self::$cache->setTags($cacheId, array($this->_getCacheInternalId())); } return $items; }
/** * Ajoute un item au cache et le tag avec "id:nomId" de l'utilisateur connecté. * @param type $key * @param type $data */ protected function addItem($key, $data) { $auth = $this->service->get('zfcuser_auth_service'); $tag = $auth->hasIdentity() ? $auth->getIdentity()->getId() . ':' . $auth->getIdentity()->getUsername() : "undefined"; $this->cache->addItem($key, $data); $this->cache->setTags($key, array($tag)); }
/** * @group 6878 */ public function testTaggableFunctionsOnEmptyStorage() { if (!$this->_storage instanceof TaggableInterface) { $this->markTestSkipped("Storage doesn't implement TaggableInterface"); } $this->assertFalse($this->_storage->setTags('unknown', ['no'])); $this->assertFalse($this->_storage->getTags('unknown')); $this->assertTrue($this->_storage->clearByTags(['unknown'])); }
/** * Get active modules list * * @return array */ public function getActiveModulesList() { // generate cache name $cacheName = CacheUtility::getCacheName(self::CACHE_MODULES_ACTIVE); // check data in cache if (null === ($modulesList = $this->staticCacheInstance->getItem($cacheName))) { $select = $this->select(); $select->from('application_module')->columns(['id', 'name'])->where(['status' => self::MODULE_STATUS_ACTIVE])->order('id'); $statement = $this->prepareStatementForSqlObject($select); $resultSet = new ResultSet(); $resultSet->initialize($statement->execute()); foreach ($resultSet as $module) { $modulesList[$module->id] = $module->name; } // save data in cache $this->staticCacheInstance->setItem($cacheName, $modulesList); $this->staticCacheInstance->setTags($cacheName, [self::CACHE_MODULES_DATA_TAG]); } return $modulesList; }
/** * Triggered after controller and view calls * * @param FilterResponseEvent $event */ public function onKernelResponse(FilterResponseEvent $event) { $request = $event->getRequest(); $response = $event->getResponse(); if ($event->getRequestType() === HttpKernelInterface::MASTER_REQUEST && $request->isMethodSafe()) { $key = $this->getKeyFromRequest($request); $response->setLastModified(new \DateTime()); // If no cache request header exists - do nothing if ($request->isNoCache() || !$response->isSuccessful()) { return; //TODO redirects cache } // If response does not exists - put it to cache if (!$this->storage->hasItem($key)) { $response->setTtl($this->storage->getOptions()->getTtl()); $data = ['content' => $response->getContent(), 'status' => $response->getStatusCode(), 'headers' => $response->headers->all()]; $this->storage->addItem($key, $data); if ($this->storage instanceof TaggableInterface) { $this->storage->setTags($key, $tags); } } } }