/** * Prepares a mirror of public package resources that is accessible through * the web server directly. * * @param array $activePackages * @return void * @author Karsten Dambekalns <*****@*****.**> */ public function publishPublicPackageResources(array $activePackages) { if ($this->settings['resource']['publishing']['detectPackageResourceChanges'] === FALSE && $this->statusCache->has('packageResourcesPublished')) { return; } foreach ($activePackages as $packageKey => $package) { $this->resourcePublisher->publishStaticResources($package->getResourcesPath() . 'Public/', 'Packages/' . $packageKey . '/'); } if (!$this->statusCache->has('packageResourcesPublished')) { $this->statusCache->set('packageResourcesPublished', 'y', array(\F3\FLOW3\Cache\Frontend\FrontendInterface::TAG_PACKAGE)); } }
/** * Around advice * * @around method(F3\FLOW3\MVC\Web\Routing\Router->resolve()) * @param F3\FLOW3\AOP\JoinPointInterface $joinPoint The current join point * @return string Result of the target method * @author Bastian Waidelich <*****@*****.**> * @author Karsten Dambekalns <*****@*****.**> */ public function cacheResolveCall(\F3\FLOW3\AOP\JoinPointInterface $joinPoint) { $routeValues = $joinPoint->getMethodArgument('routeValues'); $routeValues = $this->convertObjectsToHashes($routeValues); \F3\FLOW3\Utility\Arrays::sortKeysRecursively($routeValues); $cacheIdentifier = md5(http_build_query($routeValues)); if ($this->resolveCache->has($cacheIdentifier)) { return $this->resolveCache->get($cacheIdentifier); } $matchingUri = $joinPoint->getAdviceChain()->proceed($joinPoint); if ($matchingUri !== '') { $this->resolveCache->set($cacheIdentifier, $matchingUri); } return $matchingUri; }
/** * Exports the internal reflection data into the ReflectionData cache * * @return void * @throws \F3\FLOW3\Reflection\Exception if no cache has been injected * @author Robert Lemke <*****@*****.**> */ protected function saveToCache() { if (!is_object($this->dataCache)) { throw new \F3\FLOW3\Reflection\Exception('A cache must be injected before initializing the Reflection Service.', 1232044697); } $nonCachedClassNames = array_diff_assoc($this->reflectedClassNames, $this->cachedClassNames); $this->log('Found ' . count($nonCachedClassNames) . ' classes whose reflection data was not cached previously.', LOG_DEBUG); foreach (array_keys($nonCachedClassNames) as $className) { $this->statusCache->set(str_replace('\\', '_', $className), '', array($this->statusCache->getClassTag($className))); } $data = array(); $propertyNames = array('reflectedClassNames', 'abstractClasses', 'classConstructorMethodNames', 'classPropertyNames', 'classSchemata', 'classTagsValues', 'subClasses', 'finalClasses', 'finalMethods', 'staticMethods', 'interfaceImplementations', 'methodTagsValues', 'methodParameters', 'methodVisibilities', 'propertyTagsValues', 'taggedClasses'); foreach ($propertyNames as $propertyName) { $data[$propertyName] = $this->{$propertyName}; } $this->dataCache->set('ReflectionData', $data); $this->cachedClassNames = $this->reflectedClassNames; }
/** * Constructs the cache * * @param string $identifier A identifier which describes this cache * @param \F3\FLOW3\Cache\Backend\PhpCapableBackendInterface $backend Backend to be used for this cache * @author Robert Lemke <*****@*****.**> */ public function __construct($identifier, \F3\FLOW3\Cache\Backend\PhpCapableBackendInterface $backend) { parent::__construct($identifier, $backend); }