예제 #1
0
 /**
  * {@inheritDoc}
  */
 public function __invoke($className)
 {
     if (class_exists($className, false) || !$this->classNameInflector->isProxyClassName($className)) {
         return false;
     }
     $file = $this->fileLocator->getProxyFileName($className);
     if (!file_exists($file)) {
         return false;
     }
     return (bool) (require_once $file);
 }
예제 #2
0
 /**
  * {@inheritDoc}
  */
 public function __invoke(string $className) : bool
 {
     if (class_exists($className, false) || !$this->classNameInflector->isProxyClassName($className)) {
         return false;
     }
     $file = $this->fileLocator->getProxyFileName($className);
     if (!file_exists($file)) {
         return false;
     }
     /* @noinspection PhpIncludeInspection */
     return (bool) (require_once $file);
 }
예제 #3
0
 public function testGeneratesClass()
 {
     $generateProxy = new ReflectionMethod($this->factory, 'generateProxy');
     $generateProxy->setAccessible(true);
     $generatedClass = UniqueIdentifierGenerator::getIdentifier('fooBar');
     $this->classNameInflector->expects($this->any())->method('getProxyClassName')->with('stdClass')->will($this->returnValue($generatedClass));
     $this->generatorStrategy->expects($this->once())->method('generate')->with($this->isInstanceOf('Zend\\Code\\Generator\\ClassGenerator'));
     $this->proxyAutoloader->expects($this->once())->method('__invoke')->with($generatedClass)->will($this->returnCallback(function ($className) {
         eval('class ' . $className . ' {}');
     }));
     $this->assertSame($generatedClass, $generateProxy->invoke($this->factory, 'stdClass'));
     $this->assertTrue(class_exists($generatedClass, false));
     $this->assertSame($generatedClass, $generateProxy->invoke($this->factory, 'stdClass'));
 }
예제 #4
0
 /**
  * Generate a proxy from a class name
  * @param  string $className
  * @return string proxy class name
  */
 protected function generateProxy($className)
 {
     if (!isset($this->generatedClasses[$className])) {
         $this->generatedClasses[$className] = $this->inflector->getProxyClassName($className, array('factory' => get_class($this)));
     }
     $proxyClassName = $this->generatedClasses[$className];
     if (!class_exists($proxyClassName)) {
         $className = $this->inflector->getUserClassName($className);
         $phpClass = new ClassGenerator($proxyClassName);
         $this->getGenerator()->generate(new ReflectionClass($className), $phpClass);
         $this->configuration->getGeneratorStrategy()->generate($phpClass);
         $this->configuration->getProxyAutoloader()->__invoke($proxyClassName);
     }
     return $proxyClassName;
 }
예제 #5
0
 /**
  * @covers \ProxyManager\Autoloader\Autoloader::__invoke
  */
 public function testWillAutoloadExistingFile()
 {
     $namespace = 'Foo';
     $className = UniqueIdentifierGenerator::getIdentifier('Bar');
     $fqcn = $namespace . '\\' . $className;
     $fileName = sys_get_temp_dir() . '/foo_' . uniqid() . '.php';
     file_put_contents($fileName, '<?php namespace ' . $namespace . '; class ' . $className . '{}');
     $this->classNameInflector->expects($this->once())->method('isProxyClassName')->with($fqcn)->will($this->returnValue(true));
     $this->fileLocator->expects($this->once())->method('getProxyFileName')->will($this->returnValue($fileName));
     $this->assertTrue($this->autoloader->__invoke($fqcn));
     $this->assertTrue(class_exists($fqcn, false));
 }