diff --git a/lib/Doctrine/ORM/Proxy/ProxyException.php b/lib/Doctrine/ORM/Proxy/ProxyException.php index 892dbebbb..29462780d 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyException.php +++ b/lib/Doctrine/ORM/Proxy/ProxyException.php @@ -36,6 +36,10 @@ class ProxyException extends \Doctrine\ORM\ORMException { return new self("You must configure a proxy directory. See docs for details"); } + public static function proxyDirectoryNotWritable() { + return new self("Your proxy directory must be writable."); + } + public static function proxyNamespaceRequired() { return new self("You must configure a proxy namespace. See docs for details"); } diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index 958a0c7e6..75781eaeb 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -172,6 +172,16 @@ class ProxyFactory $file = str_replace($placeholders, $replacements, $file); + $parentDirectory = dirname($fileName); + + if ( ! is_dir($parentDirectory)) { + if (false === @mkdir($parentDirectory, 0775, true)) { + throw ProxyException::proxyDirectoryNotWritable(); + } + } else if ( ! is_writable($parentDirectory)) { + throw ProxyException::proxyDirectoryNotWritable(); + } + file_put_contents($fileName, $file, LOCK_EX); }