Ver Fonte

Merge remote branch 'kriswallsmith/mongodb/validator-annot-alias'

* kriswallsmith/mongodb/validator-annot-alias:
  [DoctrineMongoDBBundle] set annotation constraint namespace alias to assertMongoDB
Fabien Potencier há 14 anos atrás
pai
commit
ba37ea19c6

+ 22 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/Compiler/AddValidatorNamespaceAliasPass.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection\Compiler;
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+
+class AddValidatorNamespaceAliasPass implements CompilerPassInterface
+{
+    public function process(ContainerBuilder $container)
+    {
+        if (!$container->hasDefinition('validator.mapping.loader.annotation_loader')) {
+            return;
+        }
+
+        $loader = $container->getDefinition('validator.mapping.loader.annotation_loader');
+        $args = $loader->getArguments();
+
+        $args[0]['assertMongoDB'] = 'Symfony\\Bundle\\DoctrineMongoDBBundle\\Validator\\Constraints\\';
+        $loader->setArgument(0, $args[0]);
+    }
+}

+ 0 - 15
src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php

@@ -71,8 +71,6 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
             $config['metadata_cache_driver'],
             $container
         );
-
-        $this->loadConstraints($container);
     }
 
     /**
@@ -311,19 +309,6 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
         $odmConfigDef->addMethodCall('setDocumentNamespaces', array($this->aliasMap));
     }
 
-    protected function loadConstraints(ContainerBuilder $container)
-    {
-        // FIXME: the validator.annotations.namespaces parameter does not exist anymore
-        // and anyway, it was not available in the FrameworkExtension code
-        // as each bundle is isolated from the others
-        if ($container->hasParameter('validator.annotations.namespaces')) {
-            $container->setParameter('validator.annotations.namespaces', array_merge(
-                $container->getParameter('validator.annotations.namespaces'),
-                array('mongodb' => 'Symfony\Bundle\DoctrineMongoDBBundle\Validator\Constraints\\')
-            ));
-        }
-    }
-
     protected function getObjectManagerElementName($name)
     {
         return 'doctrine.odm.mongodb.' . $name;

+ 2 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/DoctrineMongoDBBundle.php

@@ -14,6 +14,7 @@ namespace Symfony\Bundle\DoctrineMongoDBBundle;
 use Symfony\Component\DependencyInjection\Compiler\PassConfig;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\HttpKernel\Bundle\Bundle;
+use Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection\Compiler\AddValidatorNamespaceAliasPass;
 use Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection\Compiler\CreateHydratorDirectoryPass;
 use Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection\Compiler\CreateProxyDirectoryPass;
 use Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection\Compiler\RegisterEventListenersAndSubscribersPass;
@@ -31,6 +32,7 @@ class DoctrineMongoDBBundle extends Bundle
     {
         parent::build($container);
 
+        $container->addCompilerPass(new AddValidatorNamespaceAliasPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION);
         $container->addCompilerPass(new RegisterEventListenersAndSubscribersPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION);
         $container->addCompilerPass(new CreateProxyDirectoryPass(), PassConfig::TYPE_BEFORE_REMOVING);
         $container->addCompilerPass(new CreateHydratorDirectoryPass(), PassConfig::TYPE_BEFORE_REMOVING);

+ 13 - 11
src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/AbstractMongoDBExtensionTest.php

@@ -12,6 +12,7 @@
 namespace Symfony\Bundle\DoctrineMongoDBBundle\Tests\DependencyInjection;
 
 use Symfony\Bundle\DoctrineMongoDBBundle\Tests\TestCase;
+use Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection\Compiler\AddValidatorNamespaceAliasPass;
 use Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection\DoctrineMongoDBExtension;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
@@ -334,25 +335,26 @@ abstract class AbstractMongoDBExtensionTest extends TestCase
     public function testRegistersValidatorNamespace()
     {
         $container = $this->getContainer();
+        $container->register('validator.mapping.loader.annotation_loader')
+            ->setClass('stdClass')
+            ->addArgument(array('foo' => 'Foo\\'));
+        $container->getCompilerPassConfig()->setOptimizationPasses(array());
+        $container->getCompilerPassConfig()->setRemovingPasses(array());
+        $container->addCompilerPass(new AddValidatorNamespaceAliasPass());
+        $container->compile();
 
-        $container->setParameter('validator.annotations.namespaces', array('Namespace1\\', 'Namespace2\\'));
-
-        $loader = new DoctrineMongoDBExtension();
-
-        $loader->load(array(array()), $container);
-
+        $definition = $container->getDefinition('validator.mapping.loader.annotation_loader');
+        $arguments = $definition->getArguments();
         $this->assertEquals(array(
-            'Namespace1\\',
-            'Namespace2\\',
-            'mongodb' => 'Symfony\Bundle\DoctrineMongoDBBundle\Validator\Constraints\\',
-        ), $container->getParameter('validator.annotations.namespaces'));
+            'assertMongoDB' => 'Symfony\\Bundle\\DoctrineMongoDBBundle\\Validator\\Constraints\\',
+            'foo' => 'Foo\\',
+        ), $arguments[0], 'compiler adds constraint alias to validator');
     }
 
     protected function getContainer($bundle = 'YamlBundle')
     {
         require_once __DIR__.'/Fixtures/Bundles/'.$bundle.'/'.$bundle.'.php';
 
-
         return new ContainerBuilder(new ParameterBag(array(
             'kernel.bundles'     => array($bundle => 'DoctrineMongoDBBundle\\Tests\\DependencyInjection\\Fixtures\\Bundles\\'.$bundle.'\\'.$bundle),
             'kernel.cache_dir'   => sys_get_temp_dir(),