findAll(); static::$cacheByPrefix = []; foreach ($configs as $config) { $key = substr($config->getName(), 0, strpos($config->getName(), '.')); if (!array_key_exists($key, static::$cacheByPrefix)) { static::$cacheByPrefix[$key] = []; } static::$cacheByPrefix[$key][] = $config; static::$cacheAll[] = $config; } } /** * @param string $prefix * @return Configuration[] */ public function getConfiguration(?string $prefix = null): array { $this->prefillCache(); if (null === $prefix) { return static::$cacheAll; } if (!array_key_exists($prefix, static::$cacheByPrefix)) { return []; } return static::$cacheByPrefix[$prefix]; } public function saveSystemConfiguration(SystemConfiguration $model) { $em = $this->getEntityManager(); $em->beginTransaction(); try { foreach ($model->getConfiguration() as $configuration) { $entity = $this->findOneBy(['name' => $configuration->getName()]); $value = $configuration->getValue(); if (null === $value && null !== $entity) { $em->remove($entity); continue; } if (null === $entity) { $entity = new Configuration(); $entity->setName($configuration->getName()); } $entity->setValue($value); $em->persist($entity); } $em->flush(); $em->commit(); } catch (ORMException $ex) { $em->rollback(); throw $ex; } $this->clearCache(); } }