[Validator] deprecate member metadata accessors in favor of existing property metadata accessors

add changelog for deprecations

fix test
This commit is contained in:
Tobias Schultze 2014-08-19 16:41:47 +02:00
parent 229355618b
commit 04eb61b80e
7 changed files with 50 additions and 27 deletions

View File

@ -15,8 +15,10 @@ use Symfony\Component\Form\FormTypeGuesserInterface;
use Symfony\Component\Form\Guess\Guess;
use Symfony\Component\Form\Guess\TypeGuess;
use Symfony\Component\Form\Guess\ValueGuess;
use Symfony\Component\Validator\MetadataFactoryInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Mapping\ClassMetadataInterface;
use Symfony\Component\Validator\Mapping\GenericMetadata;
use Symfony\Component\Validator\MetadataFactoryInterface;
class ValidatorTypeGuesser implements FormTypeGuesserInterface
{
@ -264,10 +266,14 @@ class ValidatorTypeGuesser implements FormTypeGuesserInterface
$guesses = array();
$classMetadata = $this->metadataFactory->getMetadataFor($class);
if ($classMetadata->hasMemberMetadatas($property)) {
$memberMetadatas = $classMetadata->getMemberMetadatas($property);
if ($classMetadata instanceof ClassMetadataInterface && $classMetadata->hasPropertyMetadata($property)) {
$memberMetadatas = $classMetadata->getPropertyMetadata($property);
foreach ($memberMetadatas as $memberMetadata) {
if (!$memberMetadata instanceof GenericMetadata) {
continue;
}
$constraints = $memberMetadata->getConstraints();
foreach ($constraints as $constraint) {

View File

@ -23,7 +23,7 @@
"symfony/property-access": "~2.3"
},
"require-dev": {
"symfony/validator": "~2.2",
"symfony/validator": "~2.3",
"symfony/http-foundation": "~2.2",
"symfony/http-kernel": "~2.4",
"symfony/security-csrf": "~2.4",

View File

@ -8,6 +8,9 @@ CHANGELOG
* [BC BREAK] `UserPasswordValidator` source message change
* [BC BREAK] added internal `ExecutionContextInterface::setConstraint()`
* added `ConstraintViolation::getConstraint()`
* deprecated `ClassMetadata::hasMemberMetadatas()`
* deprecated `ClassMetadata::getMemberMetadatas()`
* deprecated `ClassMetadata::addMemberMetadata()`
2.5.0
-----

View File

@ -160,7 +160,7 @@ class ClassMetadata extends ElementMetadata implements LegacyMetadataInterface,
$pathPrefix = empty($propertyPath) ? '' : $propertyPath.'.';
foreach ($this->getConstrainedProperties() as $property) {
foreach ($this->getMemberMetadatas($property) as $member) {
foreach ($this->getPropertyMetadata($property) as $member) {
$member->accept($visitor, $member->getPropertyValue($value), $group, $pathPrefix.$property, $propagatedGroup);
}
}
@ -268,7 +268,7 @@ class ClassMetadata extends ElementMetadata implements LegacyMetadataInterface,
if (!isset($this->properties[$property])) {
$this->properties[$property] = new PropertyMetadata($this->getClassName(), $property);
$this->addMemberMetadata($this->properties[$property]);
$this->addPropertyMetadata($this->properties[$property]);
}
$constraint->addImplicitGroupName($this->getDefaultGroup());
@ -294,7 +294,7 @@ class ClassMetadata extends ElementMetadata implements LegacyMetadataInterface,
if (!isset($this->getters[$property])) {
$this->getters[$property] = new GetterMetadata($this->getClassName(), $property);
$this->addMemberMetadata($this->getters[$property]);
$this->addPropertyMetadata($this->getters[$property]);
}
$constraint->addImplicitGroupName($this->getDefaultGroup());
@ -316,16 +316,18 @@ class ClassMetadata extends ElementMetadata implements LegacyMetadataInterface,
}
foreach ($source->getConstrainedProperties() as $property) {
foreach ($source->getMemberMetadatas($property) as $member) {
foreach ($source->getPropertyMetadata($property) as $member) {
$member = clone $member;
foreach ($member->getConstraints() as $constraint) {
$constraint->addImplicitGroupName($this->getDefaultGroup());
if ($member instanceof GenericMetadata) {
foreach ($member->getConstraints() as $constraint) {
$constraint->addImplicitGroupName($this->getDefaultGroup());
}
}
$this->addMemberMetadata($member);
$this->addPropertyMetadata($member);
if (!$member->isPrivate($this->name)) {
if ($member instanceof MemberMetadata && !$member->isPrivate($this->name)) {
$property = $member->getPropertyName();
if ($member instanceof PropertyMetadata && !isset($this->properties[$property])) {
@ -342,12 +344,12 @@ class ClassMetadata extends ElementMetadata implements LegacyMetadataInterface,
* Adds a member metadata.
*
* @param MemberMetadata $metadata
*
* @deprecated Deprecated since version 2.6, to be removed in 3.0.
*/
protected function addMemberMetadata(MemberMetadata $metadata)
{
$property = $metadata->getPropertyName();
$this->members[$property][] = $metadata;
$this->addPropertyMetadata($metadata);
}
/**
@ -356,10 +358,12 @@ class ClassMetadata extends ElementMetadata implements LegacyMetadataInterface,
* @param string $property The name of the property
*
* @return bool
*
* @deprecated Deprecated since version 2.6, to be removed in 3.0. Use {@link hasPropertyMetadata} instead.
*/
public function hasMemberMetadatas($property)
{
return array_key_exists($property, $this->members);
return $this->hasPropertyMetadata($property);
}
/**
@ -368,14 +372,12 @@ class ClassMetadata extends ElementMetadata implements LegacyMetadataInterface,
* @param string $property The name of the property
*
* @return MemberMetadata[] An array of MemberMetadata
*
* @deprecated Deprecated since version 2.6, to be removed in 3.0. Use {@link getPropertyMetadata} instead.
*/
public function getMemberMetadatas($property)
{
if (!isset($this->members[$property])) {
return array();
}
return $this->members[$property];
return $this->getPropertyMetadata($property);
}
/**
@ -505,4 +507,16 @@ class ClassMetadata extends ElementMetadata implements LegacyMetadataInterface,
{
return CascadingStrategy::NONE;
}
/**
* Adds a property metadata.
*
* @param PropertyMetadataInterface $metadata
*/
private function addPropertyMetadata(PropertyMetadataInterface $metadata)
{
$property = $metadata->getPropertyName();
$this->members[$property][] = $metadata;
}
}

View File

@ -15,7 +15,7 @@ use Symfony\Component\Validator\Mapping\ClassMetadata;
class FakeClassMetadata extends ClassMetadata
{
public function addPropertyMetadata($propertyName, $metadata)
public function addCustomPropertyMetadata($propertyName, $metadata)
{
if (!isset($this->members[$propertyName])) {
$this->members[$propertyName] = array();

View File

@ -101,7 +101,7 @@ class ClassMetadataTest extends \PHPUnit_Framework_TestCase
))),
);
$members = $this->metadata->getMemberMetadatas('firstName');
$members = $this->metadata->getPropertyMetadata('firstName');
$this->assertCount(1, $members);
$this->assertEquals(self::PARENTCLASS, $members[0]->getClassName());
@ -112,8 +112,8 @@ class ClassMetadataTest extends \PHPUnit_Framework_TestCase
{
$this->metadata->addPropertyConstraint('firstName', new ConstraintA());
$this->assertTrue($this->metadata->hasMemberMetadatas('firstName'));
$this->assertFalse($this->metadata->hasMemberMetadatas('non_existant_field'));
$this->assertTrue($this->metadata->hasPropertyMetadata('firstName'));
$this->assertFalse($this->metadata->hasPropertyMetadata('non_existant_field'));
}
public function testMergeConstraintsKeepsPrivateMembersSeparate()
@ -138,7 +138,7 @@ class ClassMetadataTest extends \PHPUnit_Framework_TestCase
))),
);
$members = $this->metadata->getMemberMetadatas('internal');
$members = $this->metadata->getPropertyMetadata('internal');
$this->assertCount(2, $members);
$this->assertEquals(self::PARENTCLASS, $members[0]->getClassName());

View File

@ -633,7 +633,7 @@ abstract class Abstract2Dot5ApiTest extends AbstractValidatorTest
// Legacy interface
$propertyMetadata = $this->getMock('Symfony\Component\Validator\MetadataInterface');
$metadata = new FakeClassMetadata(get_class($entity));
$metadata->addPropertyMetadata('firstName', $propertyMetadata);
$metadata->addCustomPropertyMetadata('firstName', $propertyMetadata);
$this->metadataFactory->addMetadata($metadata);