[Validator] deprecate member metadata accessors in favor of existing property metadata accessors
add changelog for deprecations fix test
This commit is contained in:
parent
229355618b
commit
04eb61b80e
@ -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) {
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
-----
|
||||
|
@ -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;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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());
|
||||
|
@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user