em = $em; $this->siteSettingDefinition = $siteSettingDefinition; $this->siteSettingFactory = $siteSettingFactory; $this->siteSettingRepository = $siteSettingRepository; $this->siteRepository = $siteRepository; $this->siteFactory = $siteFactory; } public static function getSubscribedEvents() { return [ KernelEvents::CONTROLLER => ['initSettings'] ]; } public function initSettings() { $site = $this->getSiteDefault(); if (!$site) { $site = $this->siteFactory->create( [ 'devAlias' => 'default' ] ); $this->em->persist($site); $this->em->flush($site); } $settings = $this->siteSettingDefinition->getSettings(); $factory = $this->siteSettingFactory; foreach ($settings as $category => $settingList) { foreach ($settingList as $settingName => $setting) { $entitySetting = $site->getSetting($settingName); if (!$entitySetting) { $entitySetting = $factory->create( [ 'site' => $site, 'name' => $setting['name'], $setting['field'] => isset($setting['default']) ? $setting['default'] : null, ] ); $this->em->persist($entitySetting); } else { if ($entitySetting->getValue() === null && isset($setting['default']) && $setting['default'] !== null) { $methodSetValue = 'set' . ucfirst($setting['field']); $entitySetting->$methodSetValue($setting['default']); $this->em->update($entitySetting); } } } } $this->em->flush(); } public function getSiteDefault() { return $this->siteRepository->findOneByDevAlias('default'); } }