Преглед на файлове

[DoctrineBundle, DoctrineMongoDBBundle] Making sure proxy directory is created when DI container is being built

Jonathan H. Wage преди 15 години
родител
ревизия
216dc0f5bd

+ 17 - 7
src/Symfony/Bundle/DoctrineBundle/DependencyInjection/DoctrineExtension.php

@@ -26,19 +26,20 @@ use Symfony\Components\DependencyInjection\Reference;
  */
 class DoctrineExtension extends Extension
 {
-    protected $resources;
+    protected $resources = array(
+        'dbal' => 'dbal.xml',
+        'orm'  => 'orm.xml',
+    );
     protected $alias;
     protected $bundleDirs;
     protected $bundles;
+    protected $kernelCacheDir;
 
-    public function __construct(array $bundleDirs, array $bundles)
+    public function __construct(array $bundleDirs, array $bundles, $kernelCacheDir)
     {
-        $this->resources = array(
-            'dbal' => 'dbal.xml',
-            'orm'  => 'orm.xml',
-        );
         $this->bundleDirs = $bundleDirs;
         $this->bundles = $bundles;
+        $this->kernelCacheDir = $kernelCacheDir;
     }
 
     public function setAlias($alias)
@@ -212,12 +213,21 @@ class DoctrineExtension extends Extension
 
             $container->setDefinition('doctrine.orm.metadata_driver', $mappingDriverDef);
 
+            $proxyCacheDir = $this->kernelCacheDir . '/doctrine/orm/Proxies';
+            if (!is_dir($proxyCacheDir)) {
+                if (false === @mkdir($proxyCacheDir, 0777, true)) {
+                    die(sprintf('Unable to create the Doctrine Proxy directory (%s)', dirname($proxyCacheDir)));
+                }
+            } elseif (!is_writable($proxyCacheDir)) {
+                die(sprintf('Unable to write in the Doctrine Proxy directory (%s)', $proxyCacheDir));
+            }
+
             $methods = array(
                 'setMetadataCacheImpl' => new Reference('doctrine.orm.metadata_cache'),
                 'setQueryCacheImpl' => new Reference('doctrine.orm.query_cache'),
                 'setResultCacheImpl' => new Reference('doctrine.orm.result_cache'),
                 'setMetadataDriverImpl' => new Reference('doctrine.orm.metadata_driver'),
-                'setProxyDir' => '%kernel.cache_dir%/doctrine/Proxies',
+                'setProxyDir' => $proxyCacheDir,
                 'setProxyNamespace' => 'Proxies',
                 'setAutoGenerateProxyClasses' => true
             );

+ 5 - 2
src/Symfony/Bundle/DoctrineBundle/DoctrineBundle.php

@@ -37,8 +37,11 @@ class DoctrineBundle extends Bundle
      */
     public function buildContainer(ParameterBagInterface $parameterBag)
     {
-        ContainerBuilder::registerExtension(new DoctrineExtension($parameterBag->get('kernel.bundle_dirs'), $parameterBag->get('kernel.bundles')));
-
+        ContainerBuilder::registerExtension(new DoctrineExtension( 
+            $parameterBag->get('kernel.bundle_dirs'),
+            $parameterBag->get('kernel.bundles'),
+            $parameterBag->get('kernel.cache_dir')
+        ));
         $metadataDirs = array();
         $entityDirs = array();
         $bundleDirs = $parameterBag->get('kernel.bundle_dirs');

+ 12 - 1
src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/MongoDBExtension.php

@@ -24,10 +24,12 @@ class MongoDBExtension extends Extension
     protected $resources = array(
         'mongodb' => 'mongodb.xml',
     );
+    protected $kernelCacheDir;
 
-    public function __construct(array $bundles)
+    public function __construct(array $bundles, $kernelCacheDir)
     {
         $this->bundles = $bundles;
+        $this->kernelCacheDir = $kernelCacheDir;
     }
 
     /**
@@ -38,6 +40,15 @@ class MongoDBExtension extends Extension
      */
     public function mongodbLoad($config, ContainerBuilder $container)
     {
+        $proxyCacheDir = $this->kernelCacheDir . '/doctrine/mongodb-odm/Proxies';
+        if (!is_dir($proxyCacheDir)) {
+            if (false === @mkdir($proxyCacheDir, 0777, true)) {
+                die(sprintf('Unable to create the Doctrine Proxy directory (%s)', dirname($proxyCacheDir)));
+            }
+        } elseif (!is_writable($proxyCacheDir)) {
+            die(sprintf('Unable to write in the Doctrine Proxy directory (%s)', $proxyCacheDir));
+        }
+
         if (!$container->hasDefinition('doctrine.odm.mongodb.document_manager')) {
             $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
             $loader->load($this->resources['mongodb']);

+ 4 - 1
src/Symfony/Bundle/DoctrineMongoDBBundle/DoctrineMongoDBBundle.php

@@ -25,6 +25,9 @@ class DoctrineMongoDBBundle extends Bundle
      */
     public function buildContainer(ParameterBagInterface $parameterBag)
     {
-        ContainerBuilder::registerExtension(new MongoDBExtension($parameterBag->get('kernel.bundles')));
+        ContainerBuilder::registerExtension(new MongoDBExtension(
+            $parameterBag->get('kernel.bundles'),
+            $parameterBag->get('kernel.cache_dir')
+        ));
     }
 }