/**
* Flushes caches as needed if settings, routes or policies have changed
*
* @param array $changedFiles A list of full paths to changed files
* @return void
* @see flushSystemCachesByChangedFiles()
*/
protected function flushConfigurationCachesByChangedFiles(array $changedFiles)
{
$aopProxyClassRebuildIsNeeded = false;
$aopProxyClassInfluencers = '/(?:Policy|Objects|Settings)(?:\\..*)*\\.yaml/';
$objectClassesCache = $this->getCache('Flow_Object_Classes');
$objectConfigurationCache = $this->getCache('Flow_Object_Configuration');
$caches = ['/Policy\\.yaml/' => ['Flow_Security_Authorization_Privilege_Method', 'Flow_Persistence_Doctrine', 'Flow_Persistence_Doctrine_Results', 'Flow_Aop_RuntimeExpressions'], '/Routes([^\\/]*)\\.yaml/' => ['Flow_Mvc_Routing_Route', 'Flow_Mvc_Routing_Resolve'], '/Views\\.yaml/' => ['Flow_Mvc_ViewConfigurations']];
$cachesToFlush = [];
foreach (array_keys($changedFiles) as $pathAndFilename) {
foreach ($caches as $cacheFilePattern => $cacheNames) {
if (preg_match($aopProxyClassInfluencers, $pathAndFilename) === 1) {
$aopProxyClassRebuildIsNeeded = true;
}
if (preg_match($cacheFilePattern, $pathAndFilename) !== 1) {
continue;
}
foreach ($caches[$cacheFilePattern] as $cacheName) {
$cachesToFlush[$cacheName] = $cacheFilePattern;
}
}
}
foreach ($cachesToFlush as $cacheName => $cacheFilePattern) {
$this->systemLogger->log(sprintf('A configuration file matching the pattern "%s" has been changed, flushing related cache "%s"', $cacheFilePattern, $cacheName), LOG_INFO);
$this->getCache($cacheName)->flush();
}
$this->systemLogger->log('A configuration file has been changed, flushing compiled configuration cache', LOG_INFO);
$this->configurationManager->flushConfigurationCache();
if ($aopProxyClassRebuildIsNeeded) {
$this->systemLogger->log('The configuration has changed, triggering an AOP proxy class rebuild.', LOG_INFO);
$objectConfigurationCache->remove('allAspectClassesUpToDate');
$objectConfigurationCache->remove('allCompiledCodeUpToDate');
$objectClassesCache->flush();
}
}