--- library/Doctrine/ORM/Proxy/ProxyFactory.php (revision 2)
+++ library/Doctrine/ORM/Proxy/ProxyFactory.php (working copy)
@@ -78,9 +78,8 @@
$fqn = $this->_proxyNamespace . '\\' . $proxyClassName;
if ($this->_autoGenerate && ! class_exists($fqn, false)) {
- $fileName = $this->_proxyDir . DIRECTORY_SEPARATOR . $proxyClassName . '.php';
- $this->_generateProxyClass($this->_em->getClassMetadata($className), $proxyClassName, $fileName, self::$_proxyClassTemplate);
- require $fileName;
+ $code = $this->_generateProxyClass($this->_em->getClassMetadata($className), $proxyClassName);
+ eval($code);
}
if ( ! $this->_em->getMetadataFactory()->hasMetadataFor($fqn)) {
@@ -107,19 +106,19 @@
foreach ($classes as $class) {
$proxyClassName = str_replace('\\', '', $class->name) . 'Proxy';
$proxyFileName = $proxyDir . $proxyClassName . '.php';
- $this->_generateProxyClass($class, $proxyClassName, $proxyFileName, self::$_proxyClassTemplate);
+ $code = $this->_generateProxyClass($class, $proxyClassName);
+ file_put_contents($proxyFileName, "<?php\n" . $code);
}
}
/**
* Generates a proxy class file.
*
- * @param $class
- * @param $originalClassName
+ * @param ClassMetadata $class
* @param $proxyClassName
- * @param $file The path of the file to write to.
+ * @return string The code of the generated methods.
*/
- private function _generateProxyClass($class, $proxyClassName, $fileName, $file)
+ private function _generateProxyClass(ClassMetadata $class, $proxyClassName)
{
$methods = $this->_generateMethods($class);
$sleepImpl = $this->_generateSleep($class);
@@ -142,9 +141,9 @@
$methods, $sleepImpl
);
- $file = str_replace($placeholders, $replacements, $file);
+ $file = str_replace($placeholders, $replacements, self::$_proxyClassTemplate);
- file_put_contents($fileName, $file);
+ return $file;
}
/**
@@ -244,8 +243,7 @@
/** Proxy class code template */
private static $_proxyClassTemplate =
-'<?php
-
+'
namespace <namespace>;
/**
This very minimal patch removes the use of these temporary files:
--- library/Doctrine/ORM/Proxy/ProxyFactory.php (revision 2) +++ library/Doctrine/ORM/Proxy/ProxyFactory.php (working copy) @@ -78,9 +78,8 @@ $fqn = $this->_proxyNamespace . '\\' . $proxyClassName; if ($this->_autoGenerate && ! class_exists($fqn, false)) { - $fileName = $this->_proxyDir . DIRECTORY_SEPARATOR . $proxyClassName . '.php'; - $this->_generateProxyClass($this->_em->getClassMetadata($className), $proxyClassName, $fileName, self::$_proxyClassTemplate); - require $fileName; + $file = $this->_generateProxyClass($this->_em->getClassMetadata($className), $proxyClassName, null, self::$_proxyClassTemplate); + eval('?>'.$file); } if ( ! $this->_em->getMetadataFactory()->hasMetadataFor($fqn)) { @@ -144,6 +143,9 @@ $file = str_replace($placeholders, $replacements, $file); + if ($fileName === null) + return $file; + file_put_contents($fileName, $file); }