Explorar o código

added Annotations library

Johannes Schmitt %!s(int64=14) %!d(string=hai) anos
pai
achega
d151d2d4b8

+ 77 - 0
UPDATE.md

@@ -6,6 +6,83 @@ one. It only discusses changes that need to be done when using the "public"
 API of the framework. If you "hack" the core, you should probably follow the
 timeline closely anyway.
 
+beta1 to beta2
+--------------
+
+* The annotation parsing process has been changed. All annotations which are used
+  in a class must now be imported (just like you import PHP namespaces with the
+  "use" statement):
+
+  Before:
+
+    /**
+     * @orm:Entity
+     */
+    class MyUser
+    {
+        /**
+         * @orm:Id
+         * @orm:GeneratedValue(strategy = "AUTO")
+         * @orm:Column(type="integer")
+         * @var integer
+         */
+        private $id;
+        
+        /**
+         * @orm:Column(type="string", nullable=false)
+         * @assert:NotBlank
+         * @var string
+         */
+        private $name;
+    }
+
+  After:
+
+    /**
+     * @import("Doctrine\ORM\Mapping\*")
+     * @import("Symfony\Component\Validator\Constraints\*")
+     * @ignorePhpDoc
+     * @Entity
+     */
+    class MyUser
+    {
+        /**
+         * @Id
+         * @GeneratedValue(strategy="AUTO")
+         * @Column(type="integer")
+         * @var integer
+         */
+        private $id;
+
+        /**
+         * @Column(type="string", nullable=false)
+         * @NotBlank
+         * @var string
+         */
+        private $name;
+    }
+
+* The config under "framework.validation.annotations" has been removed and was 
+  replaced with a boolean flag "framework.validation.enable_annotations" which
+  defaults to false.
+
+* The Set constraint has been removed as it is not required anymore.
+
+  Before:
+  
+    /**
+     * @assert:Set({@assert:Callback(...), @assert:Callback(...)})
+     */
+    private $foo;
+
+  After:
+
+    /**
+     * @Callback(...)
+     * @Callback(...)
+     */
+    private  $foo;
+
 PR12 to beta1
 -------------
 

+ 2 - 1
autoload.php.dist

@@ -8,11 +8,12 @@ $loader = new UniversalClassLoader();
 $loader->registerNamespaces(array(
     'Symfony\\Tests'   => __DIR__.'/tests',
     'Symfony'          => __DIR__.'/src',
-    'Doctrine\\Common' => __DIR__.'/vendor/doctrine-common/lib',
+    'Doctrine\\Common' => array(__DIR__.'/vendor/annotations/compat-src', __DIR__.'/vendor/doctrine-common/lib'),
     'Doctrine\\DBAL'   => __DIR__.'/vendor/doctrine-dbal/lib',
     'Doctrine'         => __DIR__.'/vendor/doctrine/lib',
     'Assetic'          => __DIR__.'/vendor/assetic/src',
     'Monolog'          => __DIR__.'/vendor/monolog/src',
+    'Annotations'      => __DIR__.'/vendor/annotations/src',
 ));
 $loader->registerPrefixes(array(
     'Swift_' => __DIR__.'/vendor/swiftmailer/lib/classes',

+ 1 - 6
src/Symfony/Bundle/DoctrineBundle/Resources/config/orm.xml

@@ -37,12 +37,7 @@
 
     <services>
         <!--- Annotation Metadata Reader Service -->
-        <service id="doctrine.orm.metadata.annotation_reader" class="%doctrine.orm.metadata.annotation_reader.class%" public="false">
-            <call method="setAnnotationNamespaceAlias">
-              <argument>Doctrine\ORM\Mapping\</argument>
-              <argument>orm</argument>
-            </call>
-        </service>
+        <service id="doctrine.orm.metadata.annotation_reader" class="%doctrine.orm.metadata.annotation_reader.class%" public="false" />
 
         <service id="doctrine.orm.proxy_cache_warmer" class="%doctrine.orm.proxy_cache_warmer.class%" public="false">
             <tag name="kernel.cache_warmer" />

+ 1 - 21
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

@@ -244,30 +244,10 @@ class Configuration implements ConfigurationInterface
             ->children()
                 ->arrayNode('validation')
                     ->canBeUnset()
-                    // For XML, namespace is a child of validation, so it must be moved under annotations
-                    ->beforeNormalization()
-                        ->ifTrue(function($v) { return is_array($v) && !empty($v['annotations']) && !empty($v['namespace']); })
-                        ->then(function($v){
-                            $v['annotations'] = array('namespace' => $v['namespace']);
-                            unset($v['namespace']);
-                            return $v;
-                        })
-                    ->end()
                     ->children()
                         ->booleanNode('enabled')->end()
                         ->scalarNode('cache')->end()
-                        ->arrayNode('annotations')
-                            ->canBeUnset()
-                            ->treatNullLike(array())
-                            ->treatTrueLike(array())
-                            ->fixXmlConfig('namespace')
-                            ->children()
-                                ->arrayNode('namespaces')
-                                    ->useAttributeAsKey('prefix')
-                                    ->prototype('scalar')->end()
-                                ->end()
-                            ->end()
-                        ->end()
+                        ->booleanNode('enable_annotations')->defaultFalse()->end()
                     ->end()
                 ->end()
             ->end()

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

@@ -484,19 +484,7 @@ class FrameworkExtension extends Extension
             ->replaceArgument(0, $this->getValidatorYamlMappingFiles($container))
         ;
 
-        if (isset($config['annotations'])) {
-            $namespaces = array('assert' => 'Symfony\\Component\\Validator\\Constraints\\');
-            // Register prefixes for constraint namespaces
-            if (!empty($config['annotations']['namespaces'])) {
-                $namespaces = array_merge($namespaces, $config['annotations']['namespaces']);
-            }
-
-            // Register annotation loader
-            $container
-                ->getDefinition('validator.mapping.loader.annotation_loader')
-                ->replaceArgument(0, $namespaces)
-            ;
-
+        if ($config['enable_annotations']) {
             $loaderChain = $container->getDefinition('validator.mapping.loader.loader_chain');
             $arguments = $loaderChain->getArguments();
             array_unshift($arguments[0], new Reference('validator.mapping.loader.annotation_loader'));

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

@@ -48,7 +48,6 @@
         <service id="validator.mapping.loader.static_method_loader" class="%validator.mapping.loader.static_method_loader.class%" public="false" />
 
         <service id="validator.mapping.loader.annotation_loader" class="%validator.mapping.loader.annotation_loader.class%" public="false">
-            <argument /> <!-- namespaces -->
         </service>
 
         <service id="validator.mapping.loader.xml_files_loader" class="%validator.mapping.loader.xml_files_loader.class%" public="false">

+ 0 - 22
src/Symfony/Component/Validator/Constraints/Set.php

@@ -1,22 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Constraints;
-
-class Set
-{
-    public $constraints;
-
-    public function __construct(array $constraints)
-    {
-        $this->constraints = $constraints['value'];
-    }
-}

+ 8 - 26
src/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php

@@ -11,9 +11,9 @@
 
 namespace Symfony\Component\Validator\Mapping\Loader;
 
+use Annotations\Reader;
 use Symfony\Component\Validator\Exception\MappingException;
 use Symfony\Component\Validator\Mapping\ClassMetadata;
-use Doctrine\Common\Annotations\AnnotationReader;
 use Symfony\Component\Validator\Constraints\Set;
 use Symfony\Component\Validator\Constraints\GroupSequence;
 use Symfony\Component\Validator\Constraint;
@@ -22,18 +22,12 @@ class AnnotationLoader implements LoaderInterface
 {
     protected $reader;
 
-    public function __construct(array $paths = null)
+    public function __construct()
     {
-        if (null === $paths) {
-            $paths = array('assert' => 'Symfony\\Component\\Validator\\Constraints\\');
-        }
-
-        $this->reader = new AnnotationReader();
+        $this->reader = new Reader();
         $this->reader->setAutoloadAnnotations(true);
-
-        foreach ($paths as $prefix => $path) {
-            $this->reader->setAnnotationNamespaceAlias($path, $prefix);
-        }
+        $this->reader->setIgnoreNotImportedAnnotations(false);
+        $this->reader->setIndexByClass(false);
     }
 
     /**
@@ -46,11 +40,7 @@ class AnnotationLoader implements LoaderInterface
         $loaded = false;
 
         foreach ($this->reader->getClassAnnotations($reflClass) as $constraint) {
-            if ($constraint instanceof Set) {
-                foreach ($constraint->constraints as $constraint) {
-                    $metadata->addConstraint($constraint);
-                }
-            } elseif ($constraint instanceof GroupSequence) {
+            if ($constraint instanceof GroupSequence) {
                 $metadata->setGroupSequence($constraint->groups);
             } elseif ($constraint instanceof Constraint) {
                 $metadata->addConstraint($constraint);
@@ -62,11 +52,7 @@ class AnnotationLoader implements LoaderInterface
         foreach ($reflClass->getProperties() as $property) {
             if ($property->getDeclaringClass()->getName() == $className) {
                 foreach ($this->reader->getPropertyAnnotations($property) as $constraint) {
-                    if ($constraint instanceof Set) {
-                        foreach ($constraint->constraints as $constraint) {
-                            $metadata->addPropertyConstraint($property->getName(), $constraint);
-                        }
-                    } elseif ($constraint instanceof Constraint) {
+                    if ($constraint instanceof Constraint) {
                         $metadata->addPropertyConstraint($property->getName(), $constraint);
                     }
 
@@ -81,11 +67,7 @@ class AnnotationLoader implements LoaderInterface
                     // TODO: clean this up
                     $name = lcfirst(substr($method->getName(), 0, 3)=='get' ? substr($method->getName(), 3) : substr($method->getName(), 2));
 
-                    if ($constraint instanceof Set) {
-                        foreach ($constraint->constraints as $constraint) {
-                            $metadata->addGetterConstraint($name, $constraint);
-                        }
-                    } elseif ($constraint instanceof Constraint) {
+                    if ($constraint instanceof Constraint) {
                         $metadata->addGetterConstraint($name, $constraint);
                     }
 

+ 3 - 0
vendors.sh

@@ -52,6 +52,9 @@ install_git doctrine-migrations git://github.com/doctrine/migrations.git
 # Monolog
 install_git monolog git://github.com/Seldaek/monolog.git
 
+# Annotations
+install_git annotations git://github.com/schmittjoh/annotations.git
+
 # Swiftmailer
 install_git swiftmailer git://github.com/swiftmailer/swiftmailer.git origin/4.1