/** * Retrieves the generated hydrator FQCN * * @return string */ public function getHydratorClass() { $inflector = $this->configuration->getClassNameInflector(); $realClassName = $inflector->getUserClassName($this->configuration->getHydratedClassName()); $hydratorClassName = $inflector->getGeneratedClassName($realClassName, array('factory' => get_class($this))); if (!class_exists($hydratorClassName) && $this->configuration->doesAutoGenerateProxies()) { $generator = new HydratorGenerator(); $originalClass = new ReflectionClass($realClassName); $generatedAst = $generator->generate($originalClass); $traverser = new NodeTraverser(); $traverser->addVisitor(new ClassRenamerVisitor($originalClass, $hydratorClassName)); $this->configuration->getGeneratorStrategy()->generate($traverser->traverse($generatedAst)); $this->configuration->getGeneratedClassAutoloader()->__invoke($hydratorClassName); } return $hydratorClassName; }
/** * @covers \GeneratedHydrator\Configuration::getGeneratedClassAutoloader * @covers \GeneratedHydrator\Configuration::setGeneratedClassAutoloader */ public function testSetGetGeneratedClassAutoloader() { $this->assertInstanceOf('CodeGenerationUtils\\Autoloader\\AutoloaderInterface', $this->configuration->getGeneratedClassAutoloader()); $autoloader = $this->getMock('CodeGenerationUtils\\Autoloader\\AutoloaderInterface'); $this->configuration->setGeneratedClassAutoloader($autoloader); $this->assertSame($autoloader, $this->configuration->getGeneratedClassAutoloader()); }
public function getHydrator($class) { if (isset($this->hydrators[$class])) { return $this->hydrators[$class]; } $configuration = new Configuration($class); $configuration->setGeneratedClassesNamespace('Rogiel\\StarReplay\\Hydrator\\Generated'); if ($this->directory !== null) { $configuration->setGeneratedClassesTargetDir($this->directory); spl_autoload_register($configuration->getGeneratedClassAutoloader()); } $hydratorClass = $configuration->createFactory()->getHydratorClass(); $this->hydrators[$class] = new $hydratorClass(); return $this->hydrators[$class]; }