/** * Creates metadata for testing. * * @param LoggerInterface|null $logger * @return TranslationMetadata */ private function createMetadata(LoggerInterface $logger = null) { $reader = new AnnotationReader(); $infrastructure = new ORMInfrastructure(array('\\Webfactory\\Bundle\\PolyglotBundle\\Tests\\TestEntity', '\\Webfactory\\Bundle\\PolyglotBundle\\Tests\\TestEntityTranslation')); $metadata = $infrastructure->getEntityManager()->getClassMetadata('Webfactory\\Bundle\\PolyglotBundle\\Tests\\TestEntity'); $translationMetadata = TranslationMetadata::parseFromClassMetadata($metadata, $reader); if ($logger !== null) { $translationMetadata->setLogger($logger); } return $translationMetadata; }
/** * @param $className * @param EntityManager $em * @return null|TranslationMetadata */ protected function getTranslationMetadata($className, EntityManager $em) { // In memory cache if (isset($this->translatedClasses[$className])) { return $this->translatedClasses[$className]; } $metadataFactory = $em->getMetadataFactory(); $reflectionService = $metadataFactory->getReflectionService(); $cacheDriver = $em->getConfiguration()->getMetadataCacheImpl(); // Cache driver available and in cache if ($cacheDriver) { if (($cached = $cacheDriver->fetch($className . self::CACHE_SALT)) !== false) { $this->translatedClasses[$className] = $cached; if ($cached) { // evtl. ist im Cache gespeichert, das die Klasse *nicht* übersetzt ist $cached->wakeupReflection($reflectionService); } return $cached; } } // Load/parse /* @var $metadataInfo ClassMetadataInfo */ $metadataInfo = $metadataFactory->getMetadataFor($className); $meta = TranslationMetadata::parseFromClassMetadata($metadataInfo, $this->reader); if ($meta !== null) { $this->translatedClasses[$className] = $meta; } // Save if cache driver available if ($cacheDriver) { $cacheDriver->save($className . self::CACHE_SALT, $meta); } return $meta; }