Explorar o código

[Validator] Made the namespace prefix for annotations configurable

Modified the framework bundle to use validation => Symfony\Component\Validator\Validator defaults.
Enhanced Framework Extension validator configuration to allow to extend this configuration with
user-specified annotations, for example:

    validation:
        enabled: true
        annotations:
            namespaces:
                myprojectvalidator: MyProject\Validator\

to register @myprojectvalidator:Validator(...)
Benjamin Eberlei %!s(int64=14) %!d(string=hai) anos
pai
achega
5aeb358721

+ 11 - 1
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

@@ -8,6 +8,7 @@ use Symfony\Component\DependencyInjection\Resource\FileResource;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\Definition;
+use Symfony\Component\DependencyInjection\Parameter;
 use Symfony\Component\Finder\Finder;
 use Symfony\Component\HttpFoundation\RequestMatcher;
 
@@ -457,8 +458,17 @@ class FrameworkExtension extends Extension
                 $container->addResource(new FileResource($file));
             }
 
-            if (isset($config['validation']['annotations']) && $config['validation']['annotations'] === true) {
+            if (isset($config['validation']['annotations'])) {
+                if (isset($config['validation']['annotations']['namespaces']) && is_array($config['validation']['annotations']['namespaces'])) {
+                    $container->setParameter('validator.annotations.namespaces', array_merge(
+                        $container->getParameter('validator.annotations.namespaces'),
+                        $config['validation']['annotations']['namespaces']
+                    ));
+                }
+
                 $annotationLoader = new Definition($container->getParameter('validator.mapping.loader.annotation_loader.class'));
+                $annotationLoader->addArgument(new Parameter('validator.annotations.namespaces'));
+                
                 $container->setDefinition('validator.mapping.loader.annotation_loader', $annotationLoader);
 
                 $loader = $container->getDefinition('validator.mapping.loader.loader_chain');

+ 3 - 0
src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.xml

@@ -16,6 +16,9 @@
         <parameter key="validator.mapping.loader.yaml_files_loader.class">Symfony\Component\Validator\Mapping\Loader\YamlFilesLoader</parameter>
         <parameter key="validator.mapping.loader.static_method_loader.method_name">loadValidatorMetadata</parameter>
         <parameter key="validator.validator_factory.class">Symfony\Bundle\FrameworkBundle\Validator\ConstraintValidatorFactory</parameter>
+        <parameter key="validator.annotations.namespaces" type="collection">
+            <parameter key="validation">Symfony\Component\Validator\Constraints\</parameter>
+        </parameter>
     </parameters>
 
     <services>

+ 9 - 2
src/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php

@@ -21,11 +21,18 @@ class AnnotationLoader implements LoaderInterface
 {
     protected $reader;
 
-    public function __construct()
+    public function __construct(array $paths = null)
     {
+        if (null === $paths) {
+            $paths = array('validation' => 'Symfony\\Component\\Validator\\Constraints\\');
+        }
+
         $this->reader = new AnnotationReader();
         $this->reader->setAutoloadAnnotations(true);
-        $this->reader->setAnnotationNamespaceAlias('Symfony\Component\Validator\Constraints\\', 'validation');
+
+        foreach ($paths as $prefix => $path) {
+            $this->reader->setAnnotationNamespaceAlias($path, $prefix);
+        }
     }
 
     /**