added Annotations library

This commit is contained in:
Johannes Schmitt 2011-04-28 23:09:08 +02:00
parent 23db6b64e6
commit d151d2d4b8
9 changed files with 93 additions and 90 deletions

View File

@ -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
-------------

View File

@ -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',

View File

@ -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" />

View File

@ -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()

View File

@ -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'));

View File

@ -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">

View File

@ -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'];
}
}

View File

@ -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);
}

View File

@ -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