-
-
Notifications
You must be signed in to change notification settings - Fork 926
Open
Labels
Description
API Platform version(s) affected:
I currently use api-platform/symfony in version 4.0.6
Description
The PHP8 return data type of the method is ignored. Only the old notation for annotations is taken into account.
You then get an error message when you call the whole thing via the API platform: Unexpected non-iterable value for to-many relation.
How to reproduce
I call a collection in my entity and only want to return a single item or null from it.
#[Groups(['Vehicles', 'readVehicle'])]
public function getDriver(): null|VehiclesDriver // null|VehiclesDriver is completly ignored
{
if (0 < count($this->getVehiclesDriver()))
foreach ($this->getVehiclesDriver() as $driver)
return $driver;
return null;
}
Possible Solution
Currently you can fix the error by returning the return type in the annotation.
/**
* @return VehiclesDriver|null
*/
#[Groups(['Vehicles', 'readVehicle'])]
public function getDriver(): null|VehiclesDriver
{
if (0 < count($this->getVehiclesDriver()))
foreach ($this->getVehiclesDriver() as $driver)
return $driver;
return null;
}
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
soyuka commentedon Nov 6, 2024
I expect this is an issue from symfony? But it's weird, what property info extractor are registered on your project?
stale commentedon Jan 5, 2025
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
dennismetz commentedon Feb 4, 2025
Sorry for the late reply.
We have only implemented the standard Symfony/Doctrine/API Platform features.
We had the problem again today, only with a lot more “add” and “get” methods.
soyuka commentedon Feb 5, 2025
Could you help tracking this by checking values at https://github.com/api-platform/core/blob/main/src/Metadata/Property/Factory/PropertyInfoPropertyMetadataFactory.php#L48-L59 ? (remove your cache if you don't hit these lines)
I need to know if this needs fixing in symfony or in our codebase, thanks!
dennismetz commentedon Feb 5, 2025
I will definitely get to the foreach:
I hope this helps.
dennismetz commentedon Feb 5, 2025
I just tested again whether I can get into the foreach, but I can't get in at the moment.
EDIT:
I have done the tests with and without the annotations, but both lead to the same result.
With the annotations, however, the call works in the frontend without the error message “Unexpected non-iterable value for to-many relation”.
soyuka commentedon Feb 6, 2025
since symfony/symfony#57617 got merged, can you try #6947 ?
dennismetz commentedon Feb 6, 2025
I have just tested it, but I still get the error when I remove the annotations.
With the annotations it works.