Add more specific typehint for EntityStorageInterface::loadMultiple() #827
+11
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem/motivation
Drupal has received these changes to the core: https://git.drupalcode.org/project/drupal/-/commit/bc6599bf54ebd08b971db297ba0153a1d5711efb
One of them is about
EntityStorageInterface
:This is a completely incorrect type, which already leads to issues with PHPStan (the next major version). For example, we encountered this today in a custom project:
Parameter #1 $ids of method Drupal\Core\Entity\EntityStorageInterface::loadMultiple() expects array<int>|null, array<int, int<1, max>|string> given.
There are multiple problems at the same time:
Drupal\Core\Entity\EntityInterface::id()
specifies return types as@return string|int|null
, which already makes a simple use of::loadMultiple([$node->id()])
completely incorrect.Drupal\Core\Config\Entity\ConfigEntityStorageInterface
extends this interface, making it problematic as well, because in general, Drupal configurations use strings as their IDs, not integers.This PR makes the types wider and more appropriate, which can actually be used for entity storage. I think it should remain in this package until Drupal core resolves this issue. It appears that this is not the only issue that needs fixing, and it was simply pushed into the upstream "as is".