Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[Serializer] AbstractObjectNormalizer ignores the property types of discriminated classes#32383

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
fabpot merged 1 commit intosymfony:4.2fromsandergo90:ticket_27607
Jul 8, 2019
Merged

Conversation

@sandergo90
Copy link
Contributor

QA
Branch?4.2
Bug fix?yes
New feature?no
BC breaks?no
Deprecations?no
Tests pass?yes
Fixed tickets#27607
LicenseMIT
Doc PR

As discusses in ticket#27607, when using a discriminator map and the symfony serializer, things go wrong when having two classes in the discriminator map having the same property name. When the functionvalidateAndDenormalize is called, the functiongetTypes would be called with the wrong class name.

If you take a look at thegetTypes function below, I'm not even sure if we still need the part of the discriminator at this place because we already passed the class name of the discriminated class.

    /**     * @return Type[]|null     */    private function getTypes(string $currentClass, string $attribute)    {        if (null === $this->propertyTypeExtractor) {            return null;        }        if (null !== $types = $this->propertyTypeExtractor->getTypes($currentClass, $attribute)) {            return $types;        }        if (null !== $this->classDiscriminatorResolver && null !== $discriminatorMapping = $this->classDiscriminatorResolver->getMappingForClass($currentClass)) {            if ($discriminatorMapping->getTypeProperty() === $attribute) {                return [                    new Type(Type::BUILTIN_TYPE_STRING),                ];            }            foreach ($discriminatorMapping->getTypesMapping() as $mappedClass) {                if (null !== $types = $this->propertyTypeExtractor->getTypes($mappedClass, $attribute)) {                    return $types;                }            }        }        return null;    }

@nicolas-grekas
Copy link
Member

Could you please add a test case?

@sandergo90
Copy link
ContributorAuthor

@nicolas-grekas Added a test case ;)

@nicolas-grekasnicolas-grekas changed the title[Serializer]: AbstractObjectNormalizer ignores the property types of discriminated classes[Serializer] AbstractObjectNormalizer ignores the property types of discriminated classesJul 8, 2019
…discriminated classesAdd testsRemove test groupAllow nullAdd quux null attributeAdd quux value to serialize test
@fabpot
Copy link
Member

@sandergo90 I let you ping me when tests pass so that I can merge.

@sandergo90
Copy link
ContributorAuthor

@fabpot done !

@fabpot
Copy link
Member

Thank you@sandergo90.

sandergo90 reacted with thumbs up emoji

@fabpotfabpot merged commit9fc56c7 intosymfony:4.2Jul 8, 2019
fabpot added a commit that referenced this pull requestJul 8, 2019
… types of discriminated classes (sandergo90)This PR was merged into the 4.2 branch.Discussion----------[Serializer] AbstractObjectNormalizer ignores the property types of discriminated classes| Q             | A| ------------- | ---| Branch?       | 4.2| Bug fix?      | yes| New feature?  | no| BC breaks?    | no| Deprecations? | no| Tests pass?   | yes| Fixed tickets |#27607| License       | MIT| Doc PR        |As discusses in ticket#27607, when using a discriminator map and the symfony serializer, things go wrong when having two classes in the discriminator map having the same property name. When the function ```validateAndDenormalize``` is called, the function ```getTypes``` would be called with the wrong class name.If you take a look at the ```getTypes``` function below, I'm not even sure if we still need the part of the discriminator at this place because we already passed the class name of the discriminated class.```    /**     *@return Type[]|null     */    private function getTypes(string $currentClass, string $attribute)    {        if (null === $this->propertyTypeExtractor) {            return null;        }        if (null !== $types = $this->propertyTypeExtractor->getTypes($currentClass, $attribute)) {            return $types;        }        if (null !== $this->classDiscriminatorResolver && null !== $discriminatorMapping = $this->classDiscriminatorResolver->getMappingForClass($currentClass)) {            if ($discriminatorMapping->getTypeProperty() === $attribute) {                return [                    new Type(Type::BUILTIN_TYPE_STRING),                ];            }            foreach ($discriminatorMapping->getTypesMapping() as $mappedClass) {                if (null !== $types = $this->propertyTypeExtractor->getTypes($mappedClass, $attribute)) {                    return $types;                }            }        }        return null;    }```Commits-------9fc56c7 [Serializer]: AbstractObjectNormalizer ignores the property types of discriminated classes
@sandergo90sandergo90 deleted the ticket_27607 branchJuly 8, 2019 07:45
This was referencedJul 28, 2019
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@fabpotfabpotfabpot approved these changes

@nicolas-grekasnicolas-grekasnicolas-grekas approved these changes

Assignees

No one assigned

Projects

None yet

Milestone

4.2

Development

Successfully merging this pull request may close these issues.

4 participants

@sandergo90@nicolas-grekas@fabpot@carsonbot

[8]ページ先頭

©2009-2025 Movatter.jp