Esempio n. 1
0
 public function updateConfig()
 {
     $aliases = ExtendClassLoadingUtils::getAliases($this->cacheDir);
     $this->clear(true);
     $extensions = $this->getExtensions();
     foreach ($extensions as $extension) {
         if ($extension->supports(self::ACTION_PRE_UPDATE)) {
             $extension->preUpdate();
         }
     }
     $extendProvider = $this->em->getExtendConfigProvider();
     $extendConfigs = $extendProvider->getConfigs(null, true);
     foreach ($extendConfigs as $extendConfig) {
         if ($extendConfig->is('upgradeable')) {
             if ($extendConfig->is('is_extend')) {
                 $this->checkSchema($extendConfig, $aliases);
             }
             // some bundles can change configs in pre persist events,
             // and other bundles can produce more changes depending on already made, it's a bit hacky,
             // but it's a service operation so called inevitable evil
             $extendProvider->flush();
             if ($this->checkState($extendConfig)) {
                 $extendProvider->flush();
             }
         }
     }
     foreach ($extensions as $extension) {
         if ($extension->supports(self::ACTION_POST_UPDATE)) {
             $extension->postUpdate();
         }
     }
     // do one more flush to make sure changes made by post update extensions are saved
     $extendProvider->flush();
     $this->clear();
 }
Esempio n. 2
0
 /**
  * Update config.
  *
  * @param array $originsToSkip
  */
 public function updateConfig(array $originsToSkip = [])
 {
     $aliases = ExtendClassLoadingUtils::getAliases($this->cacheDir);
     $this->clear(true);
     $extensions = $this->getExtensions();
     foreach ($extensions as $extension) {
         if ($extension->supports(self::ACTION_PRE_UPDATE)) {
             $extension->preUpdate();
         }
     }
     $extendProvider = $this->em->getExtendConfigProvider();
     $extendConfigs = $extendProvider->filter($this->createOriginFilterCallback($originsToSkip), null, true);
     foreach ($extendConfigs as $extendConfig) {
         if ($extendConfig->is('upgradeable')) {
             if ($extendConfig->is('is_extend')) {
                 $this->checkSchema($extendConfig, $aliases, $originsToSkip);
             }
             // some bundles can change configs in pre persist events,
             // and other bundles can produce more changes depending on already made, it's a bit hacky,
             // but it's a service operation so called inevitable evil
             $extendProvider->flush();
             // the clearing of an entity manager gives a performance gain of 4 times
             $extendProvider->getConfigManager()->getEntityManager()->clear();
             $this->updateStateValues($extendConfig);
         }
     }
     foreach ($extensions as $extension) {
         if ($extension->supports(self::ACTION_POST_UPDATE)) {
             $extension->postUpdate();
         }
     }
     // do one more flush to make sure changes made by post update extensions are saved
     $extendProvider->flush();
     $this->clear();
 }
Esempio n. 3
0
 /**
  * Sets class aliases for extended entities.
  *
  * @param string $cacheDir The cache directory
  *
  * @throws \ReflectionException
  */
 protected function setClassAliases($cacheDir)
 {
     $aliases = ExtendClassLoadingUtils::getAliases($cacheDir);
     foreach ($aliases as $className => $alias) {
         if (class_exists($className)) {
             if (class_exists($alias, false)) {
                 /*throw new \ReflectionException(
                       sprintf(
                           'The alias "%1$s" for the class "%2$s" cannot be registered '
                           . 'because the class "%1$s" is already loaded. '
                           . 'This may happen if this class or a derived class '
                           . 'is used in EntityConfigDumperExtension or EntityGeneratorExtension.',
                           $alias,
                           $className
                       )
                   );*/
             } else {
                 class_alias($className, $alias);
             }
         }
     }
 }
Esempio n. 4
0
 /**
  * Update config.
  *
  * @param callable|null $filter function (ConfigInterface $config) : bool
  */
 public function updateConfig($filter = null)
 {
     $aliases = ExtendClassLoadingUtils::getAliases($this->cacheDir);
     $this->clear(true);
     $extensions = $this->getExtensions();
     foreach ($extensions as $extension) {
         if ($extension->supports(self::ACTION_PRE_UPDATE)) {
             $extension->preUpdate();
         }
     }
     $configProvider = $this->configManager->getProvider('extend');
     $extendConfigs = null === $filter ? $configProvider->getConfigs(null, true) : $configProvider->filter($filter, null, true);
     foreach ($extendConfigs as $extendConfig) {
         if ($extendConfig->is('upgradeable')) {
             if ($extendConfig->is('is_extend')) {
                 $this->checkSchema($extendConfig, $configProvider, $aliases, $filter);
             }
             $this->updateStateValues($extendConfig, $configProvider);
         }
     }
     foreach ($extensions as $extension) {
         if ($extension->supports(self::ACTION_POST_UPDATE)) {
             $extension->postUpdate();
         }
     }
     $this->configManager->flush();
     $this->clear();
 }