added Annotations library
This commit is contained in:
parent
23db6b64e6
commit
d151d2d4b8
77
UPDATE.md
77
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
|
API of the framework. If you "hack" the core, you should probably follow the
|
||||||
timeline closely anyway.
|
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
|
PR12 to beta1
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
@ -8,11 +8,12 @@ $loader = new UniversalClassLoader();
|
|||||||
$loader->registerNamespaces(array(
|
$loader->registerNamespaces(array(
|
||||||
'Symfony\\Tests' => __DIR__.'/tests',
|
'Symfony\\Tests' => __DIR__.'/tests',
|
||||||
'Symfony' => __DIR__.'/src',
|
'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\\DBAL' => __DIR__.'/vendor/doctrine-dbal/lib',
|
||||||
'Doctrine' => __DIR__.'/vendor/doctrine/lib',
|
'Doctrine' => __DIR__.'/vendor/doctrine/lib',
|
||||||
'Assetic' => __DIR__.'/vendor/assetic/src',
|
'Assetic' => __DIR__.'/vendor/assetic/src',
|
||||||
'Monolog' => __DIR__.'/vendor/monolog/src',
|
'Monolog' => __DIR__.'/vendor/monolog/src',
|
||||||
|
'Annotations' => __DIR__.'/vendor/annotations/src',
|
||||||
));
|
));
|
||||||
$loader->registerPrefixes(array(
|
$loader->registerPrefixes(array(
|
||||||
'Swift_' => __DIR__.'/vendor/swiftmailer/lib/classes',
|
'Swift_' => __DIR__.'/vendor/swiftmailer/lib/classes',
|
||||||
|
@ -37,12 +37,7 @@
|
|||||||
|
|
||||||
<services>
|
<services>
|
||||||
<!--- Annotation Metadata Reader Service -->
|
<!--- Annotation Metadata Reader Service -->
|
||||||
<service id="doctrine.orm.metadata.annotation_reader" class="%doctrine.orm.metadata.annotation_reader.class%" public="false">
|
<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.proxy_cache_warmer" class="%doctrine.orm.proxy_cache_warmer.class%" public="false">
|
<service id="doctrine.orm.proxy_cache_warmer" class="%doctrine.orm.proxy_cache_warmer.class%" public="false">
|
||||||
<tag name="kernel.cache_warmer" />
|
<tag name="kernel.cache_warmer" />
|
||||||
|
@ -244,30 +244,10 @@ class Configuration implements ConfigurationInterface
|
|||||||
->children()
|
->children()
|
||||||
->arrayNode('validation')
|
->arrayNode('validation')
|
||||||
->canBeUnset()
|
->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()
|
->children()
|
||||||
->booleanNode('enabled')->end()
|
->booleanNode('enabled')->end()
|
||||||
->scalarNode('cache')->end()
|
->scalarNode('cache')->end()
|
||||||
->arrayNode('annotations')
|
->booleanNode('enable_annotations')->defaultFalse()->end()
|
||||||
->canBeUnset()
|
|
||||||
->treatNullLike(array())
|
|
||||||
->treatTrueLike(array())
|
|
||||||
->fixXmlConfig('namespace')
|
|
||||||
->children()
|
|
||||||
->arrayNode('namespaces')
|
|
||||||
->useAttributeAsKey('prefix')
|
|
||||||
->prototype('scalar')->end()
|
|
||||||
->end()
|
|
||||||
->end()
|
|
||||||
->end()
|
|
||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
|
@ -484,19 +484,7 @@ class FrameworkExtension extends Extension
|
|||||||
->replaceArgument(0, $this->getValidatorYamlMappingFiles($container))
|
->replaceArgument(0, $this->getValidatorYamlMappingFiles($container))
|
||||||
;
|
;
|
||||||
|
|
||||||
if (isset($config['annotations'])) {
|
if ($config['enable_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)
|
|
||||||
;
|
|
||||||
|
|
||||||
$loaderChain = $container->getDefinition('validator.mapping.loader.loader_chain');
|
$loaderChain = $container->getDefinition('validator.mapping.loader.loader_chain');
|
||||||
$arguments = $loaderChain->getArguments();
|
$arguments = $loaderChain->getArguments();
|
||||||
array_unshift($arguments[0], new Reference('validator.mapping.loader.annotation_loader'));
|
array_unshift($arguments[0], new Reference('validator.mapping.loader.annotation_loader'));
|
||||||
|
@ -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.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">
|
<service id="validator.mapping.loader.annotation_loader" class="%validator.mapping.loader.annotation_loader.class%" public="false">
|
||||||
<argument /> <!-- namespaces -->
|
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="validator.mapping.loader.xml_files_loader" class="%validator.mapping.loader.xml_files_loader.class%" public="false">
|
<service id="validator.mapping.loader.xml_files_loader" class="%validator.mapping.loader.xml_files_loader.class%" public="false">
|
||||||
|
@ -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'];
|
|
||||||
}
|
|
||||||
}
|
|
@ -11,9 +11,9 @@
|
|||||||
|
|
||||||
namespace Symfony\Component\Validator\Mapping\Loader;
|
namespace Symfony\Component\Validator\Mapping\Loader;
|
||||||
|
|
||||||
|
use Annotations\Reader;
|
||||||
use Symfony\Component\Validator\Exception\MappingException;
|
use Symfony\Component\Validator\Exception\MappingException;
|
||||||
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
use Doctrine\Common\Annotations\AnnotationReader;
|
|
||||||
use Symfony\Component\Validator\Constraints\Set;
|
use Symfony\Component\Validator\Constraints\Set;
|
||||||
use Symfony\Component\Validator\Constraints\GroupSequence;
|
use Symfony\Component\Validator\Constraints\GroupSequence;
|
||||||
use Symfony\Component\Validator\Constraint;
|
use Symfony\Component\Validator\Constraint;
|
||||||
@ -22,18 +22,12 @@ class AnnotationLoader implements LoaderInterface
|
|||||||
{
|
{
|
||||||
protected $reader;
|
protected $reader;
|
||||||
|
|
||||||
public function __construct(array $paths = null)
|
public function __construct()
|
||||||
{
|
{
|
||||||
if (null === $paths) {
|
$this->reader = new Reader();
|
||||||
$paths = array('assert' => 'Symfony\\Component\\Validator\\Constraints\\');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->reader = new AnnotationReader();
|
|
||||||
$this->reader->setAutoloadAnnotations(true);
|
$this->reader->setAutoloadAnnotations(true);
|
||||||
|
$this->reader->setIgnoreNotImportedAnnotations(false);
|
||||||
foreach ($paths as $prefix => $path) {
|
$this->reader->setIndexByClass(false);
|
||||||
$this->reader->setAnnotationNamespaceAlias($path, $prefix);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -46,11 +40,7 @@ class AnnotationLoader implements LoaderInterface
|
|||||||
$loaded = false;
|
$loaded = false;
|
||||||
|
|
||||||
foreach ($this->reader->getClassAnnotations($reflClass) as $constraint) {
|
foreach ($this->reader->getClassAnnotations($reflClass) as $constraint) {
|
||||||
if ($constraint instanceof Set) {
|
if ($constraint instanceof GroupSequence) {
|
||||||
foreach ($constraint->constraints as $constraint) {
|
|
||||||
$metadata->addConstraint($constraint);
|
|
||||||
}
|
|
||||||
} elseif ($constraint instanceof GroupSequence) {
|
|
||||||
$metadata->setGroupSequence($constraint->groups);
|
$metadata->setGroupSequence($constraint->groups);
|
||||||
} elseif ($constraint instanceof Constraint) {
|
} elseif ($constraint instanceof Constraint) {
|
||||||
$metadata->addConstraint($constraint);
|
$metadata->addConstraint($constraint);
|
||||||
@ -62,11 +52,7 @@ class AnnotationLoader implements LoaderInterface
|
|||||||
foreach ($reflClass->getProperties() as $property) {
|
foreach ($reflClass->getProperties() as $property) {
|
||||||
if ($property->getDeclaringClass()->getName() == $className) {
|
if ($property->getDeclaringClass()->getName() == $className) {
|
||||||
foreach ($this->reader->getPropertyAnnotations($property) as $constraint) {
|
foreach ($this->reader->getPropertyAnnotations($property) as $constraint) {
|
||||||
if ($constraint instanceof Set) {
|
if ($constraint instanceof Constraint) {
|
||||||
foreach ($constraint->constraints as $constraint) {
|
|
||||||
$metadata->addPropertyConstraint($property->getName(), $constraint);
|
|
||||||
}
|
|
||||||
} elseif ($constraint instanceof Constraint) {
|
|
||||||
$metadata->addPropertyConstraint($property->getName(), $constraint);
|
$metadata->addPropertyConstraint($property->getName(), $constraint);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,11 +67,7 @@ class AnnotationLoader implements LoaderInterface
|
|||||||
// TODO: clean this up
|
// TODO: clean this up
|
||||||
$name = lcfirst(substr($method->getName(), 0, 3)=='get' ? substr($method->getName(), 3) : substr($method->getName(), 2));
|
$name = lcfirst(substr($method->getName(), 0, 3)=='get' ? substr($method->getName(), 3) : substr($method->getName(), 2));
|
||||||
|
|
||||||
if ($constraint instanceof Set) {
|
if ($constraint instanceof Constraint) {
|
||||||
foreach ($constraint->constraints as $constraint) {
|
|
||||||
$metadata->addGetterConstraint($name, $constraint);
|
|
||||||
}
|
|
||||||
} elseif ($constraint instanceof Constraint) {
|
|
||||||
$metadata->addGetterConstraint($name, $constraint);
|
$metadata->addGetterConstraint($name, $constraint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +52,9 @@ install_git doctrine-migrations git://github.com/doctrine/migrations.git
|
|||||||
# Monolog
|
# Monolog
|
||||||
install_git monolog git://github.com/Seldaek/monolog.git
|
install_git monolog git://github.com/Seldaek/monolog.git
|
||||||
|
|
||||||
|
# Annotations
|
||||||
|
install_git annotations git://github.com/schmittjoh/annotations.git
|
||||||
|
|
||||||
# Swiftmailer
|
# Swiftmailer
|
||||||
install_git swiftmailer git://github.com/swiftmailer/swiftmailer.git origin/4.1
|
install_git swiftmailer git://github.com/swiftmailer/swiftmailer.git origin/4.1
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user