Skip to content

LinksHandlerTrait : The class "App\Entity\EntityName" cannot be retrieved from "App\Entity\EntityName" #6059

@xterr

Description

@xterr
Contributor

API Platform version(s) affected: 3.2.7

Description
RuntimeException is thrown on line 87 in LinksHandlerTrait for:

  1. Entity with a column of type enum
  2. Int BackedEnum, with a member with value = 0
  • The issue is present only when there is a value equal to 0 in the database.
  • The issue happens for single items and collections.
  • For non-enum fields value=0 is accepted and all functionality is as expected.

How to reproduce

enum StateEnum: int {
  case NEW      = 0;
  case ACTIVE   = 1;
  case INACTIVE = 2;
}

#[ORM\Entity]
#[ApiResource]
class Entity {
  #[ORM\Column(type: Types::SMALLINT, enumType: StateEnum::class)]
  #[Groups(['entity:read', 'entity:write'])]
  #[Assert\Choice(callback: [StateEnum::class, 'cases'])]
  state: StateEnum
}

Additional context
After some debugging, I observed that the data was correctly retrieved from the database.
The problem might start from ApiPlatform\GraphQl\State\Provider\ReadProvider#107
ReadProvider

Activity

changed the title [-]The class \"App\\Entity\\EntityName\" cannot be retrieved from \"App\\Entity\\EntityName\"[/-] [+]The class "App\Entity\EntityName" cannot be retrieved from "App\Entity\EntityName"[/+] on Dec 20, 2023
changed the title [-]The class "App\Entity\EntityName" cannot be retrieved from "App\Entity\EntityName"[/-] [+]LinksHandlerTrait : The class "App\Entity\EntityName" cannot be retrieved from "App\Entity\EntityName"[/+] on Dec 20, 2023
soyuka

soyuka commented on Dec 20, 2023

@soyuka
Member

Are you using the enum as identifier? this isn't supported may we see the whole resource or some more informations as this is not enough?

xterr

xterr commented on Dec 20, 2023

@xterr
ContributorAuthor

@soyuka no. The entity has id autoincrement as the identifier.

Only normal fields typed with enum (like in the example) have this problem. (I also have setters and getters defined as i know it impacts propertyResolver)

It seems to occur only for graphql endpoint.

I also did more tests by changing the column name from state to type and other non-common names), same problem.

Thank you 👍

soyuka

soyuka commented on Dec 20, 2023

@soyuka
Member

I see, can you provide a reproducer ?

xterr

xterr commented on Dec 20, 2023

@xterr
ContributorAuthor

I created a repository for this purpose:
https://github.com/xterr/api-platform-links-handler-trait

You can find a test case in the readme

Thank you

GwendolenLynch

GwendolenLynch commented on Apr 8, 2024

@GwendolenLynch
Contributor

This looks to be fixed by #6092

The tl;dr of what was happening was right here

if ($body || null === $resourceClass || ($type && !$type->isCollection())) {

$body was equal to 0 so the loose comparison sent things down the wrong code path.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @xterr@soyuka@GwendolenLynch

        Issue actions

          LinksHandlerTrait : The class "App\Entity\EntityName" cannot be retrieved from "App\Entity\EntityName" · Issue #6059 · api-platform/core