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
|
||||
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
|
||||
-------------
|
||||
|
||||
|
@ -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',
|
||||
|
@ -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" />
|
||||
|
@ -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()
|
||||
|
@ -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'));
|
||||
|
@ -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">
|
||||
|
@ -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;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user