/**
* @param string $serviceName
* @param string $cacheDirectory
*/
private function createEagerProxy($serviceName, $cacheDirectory)
{
$definition = $this->builder->getDefinition($serviceName);
$this->builder->removeDefinition($serviceName);
$hiddenServiceName = $this->prefix($serviceName);
$proxyClassName = $definition->getClass() . md5(serialize($definition));
$this->builder->addDefinition($serviceName)->setClass($proxyClassName)->setFactory('@' . $this->prefix('eagerServiceFactory') . '::create', array($hiddenServiceName, $proxyClassName));
$this->builder->addDefinition($hiddenServiceName, $definition)->setAutowired(false);
if (!class_exists($proxyClassName)) {
$classGenerator = new ClassGenerator();
$this->proxyGenerator->generate(new \ReflectionClass($definition->getClass()), $classGenerator);
$classGenerator->setName($proxyClassName);
$code = '<?php' . ClassGenerator::LINE_FEED . $classGenerator->generate();
$tempPath = $cacheDirectory . uniqid() . ".php";
$backslashPos = strrpos($proxyClassName, '\\');
$newPath = $cacheDirectory . substr($proxyClassName, $backslashPos ? $backslashPos + 1 : 0) . ".php";
file_put_contents($tempPath, $code, LOCK_EX);
rename($tempPath, $newPath);
require_once $newPath;
}
}