From 2611f424c4fa573cf931685fdde556dfefa86090 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Fri, 25 Jul 2025 13:35:24 +0200 Subject: [PATCH] chore: add param type --- phpstan.neon.dist | 1 - .../Common/Filter/BackedEnumFilterTrait.php | 2 +- .../Common/Filter/BooleanFilterTrait.php | 2 +- .../Common/Filter/DateFilterTrait.php | 2 +- .../Common/Filter/ExistsFilterTrait.php | 2 +- .../Common/Filter/NumericFilterTrait.php | 2 +- .../Common/Filter/OrderFilterTrait.php | 11 +++++++- .../Common/State/PersistProcessor.php | 2 +- src/Doctrine/Common/State/RemoveProcessor.php | 2 +- src/Doctrine/Odm/Filter/AbstractFilter.php | 2 +- src/Doctrine/Odm/Filter/BooleanFilter.php | 2 +- src/Doctrine/Odm/Filter/DateFilter.php | 4 +-- src/Doctrine/Odm/Filter/ExistsFilter.php | 2 +- src/Doctrine/Odm/Filter/NumericFilter.php | 2 +- src/Doctrine/Odm/Filter/OrderFilter.php | 2 +- src/Doctrine/Odm/Filter/RangeFilter.php | 2 +- src/Doctrine/Odm/Filter/SearchFilter.php | 2 +- .../Odm/PropertyInfo/DoctrineExtractor.php | 11 ++++++++ .../Extension/DoctrinePaginatorFactory.php | 6 +++++ src/Doctrine/Orm/Filter/AbstractFilter.php | 2 +- src/Doctrine/Orm/Filter/BooleanFilter.php | 2 +- src/Doctrine/Orm/Filter/DateFilter.php | 2 +- src/Doctrine/Orm/Filter/ExistsFilter.php | 2 +- src/Doctrine/Orm/Filter/NumericFilter.php | 2 +- src/Doctrine/Orm/Filter/OrderFilter.php | 2 +- src/Doctrine/Orm/Filter/RangeFilter.php | 2 +- src/Doctrine/Orm/Filter/SearchFilter.php | 2 +- .../Serializer/ItemNormalizer.php | 3 +++ src/GraphQl/Action/GraphiQlAction.php | 3 +++ src/GraphQl/ExecutorInterface.php | 2 ++ .../Resolver/ResourceFieldResolver.php | 3 +++ .../Serializer/Exception/ErrorNormalizer.php | 3 +++ .../Exception/HttpExceptionNormalizer.php | 3 +++ .../Exception/RuntimeExceptionNormalizer.php | 3 +++ .../ValidationExceptionNormalizer.php | 3 +++ src/GraphQl/Serializer/ItemNormalizer.php | 9 ++++++- src/GraphQl/Serializer/ObjectNormalizer.php | 3 +++ src/Hal/Serializer/EntrypointNormalizer.php | 3 +++ src/Hal/Serializer/ItemNormalizer.php | 5 +++- src/Hal/Serializer/ObjectNormalizer.php | 3 +++ .../CollectionFiltersNormalizer.php | 3 +++ .../Serializer/DocumentationNormalizer.php | 3 +++ src/Hydra/Serializer/EntrypointNormalizer.php | 3 +++ .../PartialCollectionViewNormalizer.php | 6 +++++ .../Serializer/CollectionNormalizer.php | 4 +-- .../ConstraintViolationListNormalizer.php | 3 +++ .../Serializer/EntrypointNormalizer.php | 3 +++ src/JsonApi/Serializer/ErrorNormalizer.php | 3 +++ src/JsonApi/Serializer/ItemNormalizer.php | 3 +++ src/JsonApi/Serializer/ObjectNormalizer.php | 3 +++ src/JsonLd/Serializer/ItemNormalizer.php | 3 +++ src/JsonLd/Serializer/JsonLdContextTrait.php | 2 +- src/JsonLd/Serializer/ObjectNormalizer.php | 3 +++ src/Metadata/ApiProperty.php | 25 +++++++++++++++++-- src/Metadata/ErrorResource.php | 6 ++--- src/Metadata/HttpOperation.php | 3 +++ src/Metadata/Metadata.php | 7 ++++-- src/Metadata/Util/IriHelper.php | 2 ++ src/OpenApi/Model/ExtensionTrait.php | 2 +- src/OpenApi/Model/Header.php | 2 +- src/OpenApi/Model/MediaType.php | 4 +-- src/OpenApi/Model/Operation.php | 3 +++ src/OpenApi/OpenApi.php | 3 +++ .../Serializer/ApiGatewayNormalizer.php | 5 +++- .../Serializer/LegacyOpenApiNormalizer.php | 5 +++- src/OpenApi/Serializer/OpenApiNormalizer.php | 3 +++ ...tractConstraintViolationListNormalizer.php | 3 +++ src/Serializer/AbstractItemNormalizer.php | 8 +++--- src/Serializer/Filter/PropertyFilter.php | 2 +- src/Serializer/ItemNormalizer.php | 15 ++++++----- .../Mapping/Factory/ClassMetadataFactory.php | 10 +++++++- .../Bundle/Command/DebugResourceCommand.php | 4 +++ .../Bundle/SwaggerUi/SwaggerUiContext.php | 3 +++ 73 files changed, 224 insertions(+), 56 deletions(-) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index f5defe04968..9d995171956 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -149,7 +149,6 @@ parameters: - src/Symfony/Bundle/Test - src/Symfony/Tests - tests - - src # TODO - identifier: missingType.return paths: diff --git a/src/Doctrine/Common/Filter/BackedEnumFilterTrait.php b/src/Doctrine/Common/Filter/BackedEnumFilterTrait.php index 7519c244a40..811011e805b 100644 --- a/src/Doctrine/Common/Filter/BackedEnumFilterTrait.php +++ b/src/Doctrine/Common/Filter/BackedEnumFilterTrait.php @@ -89,7 +89,7 @@ abstract protected function normalizePropertyName(string $property): string; */ abstract protected function isBackedEnumField(string $property, string $resourceClass): bool; - private function normalizeValue($value, string $property): mixed + private function normalizeValue(mixed $value, string $property): mixed { $firstCase = $this->enumTypes[$property]::cases()[0] ?? null; if ( diff --git a/src/Doctrine/Common/Filter/BooleanFilterTrait.php b/src/Doctrine/Common/Filter/BooleanFilterTrait.php index c9ee4a364d8..4e6a42cff31 100644 --- a/src/Doctrine/Common/Filter/BooleanFilterTrait.php +++ b/src/Doctrine/Common/Filter/BooleanFilterTrait.php @@ -75,7 +75,7 @@ protected function isBooleanField(string $property, string $resourceClass): bool return isset(self::DOCTRINE_BOOLEAN_TYPES[(string) $this->getDoctrineFieldType($property, $resourceClass)]); } - private function normalizeValue($value, string $property): ?bool + private function normalizeValue(mixed $value, string $property): ?bool { if (\in_array($value, [true, 'true', '1'], true)) { return true; diff --git a/src/Doctrine/Common/Filter/DateFilterTrait.php b/src/Doctrine/Common/Filter/DateFilterTrait.php index 33f24664459..4a2f596a367 100644 --- a/src/Doctrine/Common/Filter/DateFilterTrait.php +++ b/src/Doctrine/Common/Filter/DateFilterTrait.php @@ -81,7 +81,7 @@ protected function getFilterDescription(string $property, string $period): array ]; } - private function normalizeValue($value, string $operator): ?string + private function normalizeValue(mixed $value, string $operator): ?string { if (false === \is_string($value)) { $this->getLogger()->notice('Invalid filter ignored', [ diff --git a/src/Doctrine/Common/Filter/ExistsFilterTrait.php b/src/Doctrine/Common/Filter/ExistsFilterTrait.php index c1ab4a3e3a2..3521daf98ef 100644 --- a/src/Doctrine/Common/Filter/ExistsFilterTrait.php +++ b/src/Doctrine/Common/Filter/ExistsFilterTrait.php @@ -70,7 +70,7 @@ abstract protected function getLogger(): LoggerInterface; abstract protected function normalizePropertyName(string $property): string; - private function normalizeValue($value, string $property): ?bool + private function normalizeValue(mixed $value, string $property): ?bool { if (\in_array($value, [true, 'true', '1', '', null], true)) { return true; diff --git a/src/Doctrine/Common/Filter/NumericFilterTrait.php b/src/Doctrine/Common/Filter/NumericFilterTrait.php index 242a627531d..19fba0b2d00 100644 --- a/src/Doctrine/Common/Filter/NumericFilterTrait.php +++ b/src/Doctrine/Common/Filter/NumericFilterTrait.php @@ -79,7 +79,7 @@ protected function isNumericField(string $property, string $resourceClass): bool return isset(self::DOCTRINE_NUMERIC_TYPES[(string) $this->getDoctrineFieldType($property, $resourceClass)]); } - protected function normalizeValues($value, string $property): ?array + protected function normalizeValues(mixed $value, string $property): ?array { if (!is_numeric($value) && (!\is_array($value) || !$this->isNumericArray($value))) { $this->getLogger()->notice('Invalid filter ignored', [ diff --git a/src/Doctrine/Common/Filter/OrderFilterTrait.php b/src/Doctrine/Common/Filter/OrderFilterTrait.php index 4a3f5f862e5..2c9258ad487 100644 --- a/src/Doctrine/Common/Filter/OrderFilterTrait.php +++ b/src/Doctrine/Common/Filter/OrderFilterTrait.php @@ -14,6 +14,7 @@ namespace ApiPlatform\Doctrine\Common\Filter; use ApiPlatform\Doctrine\Common\PropertyHelperTrait; +use ApiPlatform\Metadata\Exception\InvalidArgumentException; /** * Trait for ordering the collection by given properties. @@ -70,13 +71,21 @@ abstract protected function getProperties(): ?array; abstract protected function normalizePropertyName(string $property): string; - private function normalizeValue($value, string $property): ?string + private function normalizeValue(mixed $value, string $property): ?string { if (empty($value) && null !== $defaultDirection = $this->getProperties()[$property]['default_direction'] ?? null) { // fallback to default direction $value = $defaultDirection; } + if (!\is_string($value)) { + $this->getLogger()->notice('Invalid filter ignored', [ + 'exception' => new InvalidArgumentException(\sprintf('Invalid string value for "%s" property', $property)), + ]); + + return null; + } + $value = strtoupper($value); if (!\in_array($value, [self::DIRECTION_ASC, self::DIRECTION_DESC], true)) { return null; diff --git a/src/Doctrine/Common/State/PersistProcessor.php b/src/Doctrine/Common/State/PersistProcessor.php index abc21bf9e15..19e575c822c 100644 --- a/src/Doctrine/Common/State/PersistProcessor.php +++ b/src/Doctrine/Common/State/PersistProcessor.php @@ -110,7 +110,7 @@ public function process(mixed $data, Operation $operation, array $uriVariables = /** * Checks if doctrine does not manage data automatically. */ - private function isDeferredExplicit(DoctrineObjectManager $manager, $data): bool + private function isDeferredExplicit(DoctrineObjectManager $manager, object $data): bool { $classMetadata = $manager->getClassMetadata($this->getObjectClass($data)); if ($classMetadata && method_exists($classMetadata, 'isChangeTrackingDeferredExplicit')) { // @phpstan-ignore-line metadata can be null diff --git a/src/Doctrine/Common/State/RemoveProcessor.php b/src/Doctrine/Common/State/RemoveProcessor.php index cf9b472892c..80f8f38a725 100644 --- a/src/Doctrine/Common/State/RemoveProcessor.php +++ b/src/Doctrine/Common/State/RemoveProcessor.php @@ -40,7 +40,7 @@ public function process(mixed $data, Operation $operation, array $uriVariables = /** * Gets the Doctrine object manager associated with given data. */ - private function getManager($data): ?DoctrineObjectManager + private function getManager(mixed $data): ?DoctrineObjectManager { return \is_object($data) ? $this->managerRegistry->getManagerForClass($this->getObjectClass($data)) : null; } diff --git a/src/Doctrine/Odm/Filter/AbstractFilter.php b/src/Doctrine/Odm/Filter/AbstractFilter.php index 824a85c6917..fd5ea562c63 100644 --- a/src/Doctrine/Odm/Filter/AbstractFilter.php +++ b/src/Doctrine/Odm/Filter/AbstractFilter.php @@ -60,7 +60,7 @@ public function apply(Builder $aggregationBuilder, string $resourceClass, ?Opera /** * Passes a property through the filter. */ - abstract protected function filterProperty(string $property, $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void; + abstract protected function filterProperty(string $property, mixed $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void; public function hasManagerRegistry(): bool { diff --git a/src/Doctrine/Odm/Filter/BooleanFilter.php b/src/Doctrine/Odm/Filter/BooleanFilter.php index 02de91ae589..855b593e0ea 100644 --- a/src/Doctrine/Odm/Filter/BooleanFilter.php +++ b/src/Doctrine/Odm/Filter/BooleanFilter.php @@ -118,7 +118,7 @@ final class BooleanFilter extends AbstractFilter implements JsonSchemaFilterInte /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void + protected function filterProperty(string $property, mixed $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void { if ( !$this->isPropertyEnabled($property, $resourceClass) diff --git a/src/Doctrine/Odm/Filter/DateFilter.php b/src/Doctrine/Odm/Filter/DateFilter.php index b2cfe80a0f5..227888c80f2 100644 --- a/src/Doctrine/Odm/Filter/DateFilter.php +++ b/src/Doctrine/Odm/Filter/DateFilter.php @@ -134,7 +134,7 @@ final class DateFilter extends AbstractFilter implements DateFilterInterface, Js /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void + protected function filterProperty(string $property, mixed $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void { // Expect $value to be an array having the period as keys and the date value as values if ( @@ -202,7 +202,7 @@ protected function filterProperty(string $property, $value, Builder $aggregation /** * Adds the match stage according to the chosen null management. */ - private function addMatch(Builder $aggregationBuilder, string $field, string $operator, $value, ?string $nullManagement = null): void + private function addMatch(Builder $aggregationBuilder, string $field, string $operator, mixed $value, ?string $nullManagement = null): void { $value = $this->normalizeValue($value, $operator); diff --git a/src/Doctrine/Odm/Filter/ExistsFilter.php b/src/Doctrine/Odm/Filter/ExistsFilter.php index e80d6702edd..a4f751b3a9e 100644 --- a/src/Doctrine/Odm/Filter/ExistsFilter.php +++ b/src/Doctrine/Odm/Filter/ExistsFilter.php @@ -143,7 +143,7 @@ public function apply(Builder $aggregationBuilder, string $resourceClass, ?Opera /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void + protected function filterProperty(string $property, mixed $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void { if ( !$this->isPropertyEnabled($property, $resourceClass) diff --git a/src/Doctrine/Odm/Filter/NumericFilter.php b/src/Doctrine/Odm/Filter/NumericFilter.php index 6f176a7679f..c6122e4705e 100644 --- a/src/Doctrine/Odm/Filter/NumericFilter.php +++ b/src/Doctrine/Odm/Filter/NumericFilter.php @@ -122,7 +122,7 @@ final class NumericFilter extends AbstractFilter implements JsonSchemaFilterInte /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void + protected function filterProperty(string $property, mixed $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void { if ( !$this->isPropertyEnabled($property, $resourceClass) diff --git a/src/Doctrine/Odm/Filter/OrderFilter.php b/src/Doctrine/Odm/Filter/OrderFilter.php index 8347c5e043c..105c3327c95 100644 --- a/src/Doctrine/Odm/Filter/OrderFilter.php +++ b/src/Doctrine/Odm/Filter/OrderFilter.php @@ -253,7 +253,7 @@ public function apply(Builder $aggregationBuilder, string $resourceClass, ?Opera /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void + protected function filterProperty(string $property, mixed $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void { if (!$this->isPropertyEnabled($property, $resourceClass) || !$this->isPropertyMapped($property, $resourceClass)) { return; diff --git a/src/Doctrine/Odm/Filter/RangeFilter.php b/src/Doctrine/Odm/Filter/RangeFilter.php index 7f1574f193f..0356b29b6fa 100644 --- a/src/Doctrine/Odm/Filter/RangeFilter.php +++ b/src/Doctrine/Odm/Filter/RangeFilter.php @@ -115,7 +115,7 @@ final class RangeFilter extends AbstractFilter implements RangeFilterInterface, /** * {@inheritdoc} */ - protected function filterProperty(string $property, $values, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void + protected function filterProperty(string $property, mixed $values, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void { if ( !\is_array($values) diff --git a/src/Doctrine/Odm/Filter/SearchFilter.php b/src/Doctrine/Odm/Filter/SearchFilter.php index c370e57dcf0..8d597836fa3 100644 --- a/src/Doctrine/Odm/Filter/SearchFilter.php +++ b/src/Doctrine/Odm/Filter/SearchFilter.php @@ -162,7 +162,7 @@ protected function getPropertyAccessor(): PropertyAccessorInterface /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void + protected function filterProperty(string $property, mixed $value, Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void { if ( null === $value diff --git a/src/Doctrine/Odm/PropertyInfo/DoctrineExtractor.php b/src/Doctrine/Odm/PropertyInfo/DoctrineExtractor.php index 89718c177b3..00105f4929e 100644 --- a/src/Doctrine/Odm/PropertyInfo/DoctrineExtractor.php +++ b/src/Doctrine/Odm/PropertyInfo/DoctrineExtractor.php @@ -41,6 +41,8 @@ public function __construct(private readonly ObjectManager $objectManager) /** * {@inheritdoc} * + * @param string $class + * * @return string[]|null */ public function getProperties($class, array $context = []): ?array @@ -111,6 +113,9 @@ public function getType(string $class, string $property, array $context = []): ? * * // deprecated since 4.2 use "getType" instead * + * @param string $class + * @param string $property + * * @return LegacyType[]|null */ public function getTypes($class, $property, array $context = []): ?array @@ -183,6 +188,9 @@ public function getTypes($class, $property, array $context = []): ?array /** * {@inheritdoc} + * + * @param string $class + * @param string $property */ public function isReadable($class, $property, array $context = []): ?bool { @@ -191,6 +199,9 @@ public function isReadable($class, $property, array $context = []): ?bool /** * {@inheritdoc} + * + * @param string $class + * @param string $property */ public function isWritable($class, $property, array $context = []): ?bool { diff --git a/src/Doctrine/Orm/Extension/DoctrinePaginatorFactory.php b/src/Doctrine/Orm/Extension/DoctrinePaginatorFactory.php index f7daadb8d35..ed4cf3699e0 100644 --- a/src/Doctrine/Orm/Extension/DoctrinePaginatorFactory.php +++ b/src/Doctrine/Orm/Extension/DoctrinePaginatorFactory.php @@ -13,10 +13,16 @@ namespace ApiPlatform\Doctrine\Orm\Extension; +use Doctrine\ORM\Query; +use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\Tools\Pagination\Paginator; class DoctrinePaginatorFactory { + /** + * @param Query|QueryBuilder $query + * @param bool $fetchJoinCollection + */ public function getPaginator($query, $fetchJoinCollection): Paginator { return new Paginator($query, $fetchJoinCollection); diff --git a/src/Doctrine/Orm/Filter/AbstractFilter.php b/src/Doctrine/Orm/Filter/AbstractFilter.php index 18b29282227..0f9e7417dd1 100644 --- a/src/Doctrine/Orm/Filter/AbstractFilter.php +++ b/src/Doctrine/Orm/Filter/AbstractFilter.php @@ -57,7 +57,7 @@ public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $q * @param class-string $resourceClass * @param array $context */ - abstract protected function filterProperty(string $property, $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void; + abstract protected function filterProperty(string $property, mixed $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void; public function hasManagerRegistry(): bool { diff --git a/src/Doctrine/Orm/Filter/BooleanFilter.php b/src/Doctrine/Orm/Filter/BooleanFilter.php index 6cc7dfd4e06..9fda1f507d8 100644 --- a/src/Doctrine/Orm/Filter/BooleanFilter.php +++ b/src/Doctrine/Orm/Filter/BooleanFilter.php @@ -119,7 +119,7 @@ final class BooleanFilter extends AbstractFilter implements JsonSchemaFilterInte /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void + protected function filterProperty(string $property, mixed $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void { if ( !$this->isPropertyEnabled($property, $resourceClass) diff --git a/src/Doctrine/Orm/Filter/DateFilter.php b/src/Doctrine/Orm/Filter/DateFilter.php index df038ea3103..b7f7af569b8 100644 --- a/src/Doctrine/Orm/Filter/DateFilter.php +++ b/src/Doctrine/Orm/Filter/DateFilter.php @@ -143,7 +143,7 @@ final class DateFilter extends AbstractFilter implements DateFilterInterface, Js /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void + protected function filterProperty(string $property, mixed $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void { // Expect $value to be an array having the period as keys and the date value as values if ( diff --git a/src/Doctrine/Orm/Filter/ExistsFilter.php b/src/Doctrine/Orm/Filter/ExistsFilter.php index 482405759d4..7dbb046630e 100644 --- a/src/Doctrine/Orm/Filter/ExistsFilter.php +++ b/src/Doctrine/Orm/Filter/ExistsFilter.php @@ -150,7 +150,7 @@ public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $q /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void + protected function filterProperty(string $property, mixed $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void { if ( !$this->isPropertyEnabled($property, $resourceClass) diff --git a/src/Doctrine/Orm/Filter/NumericFilter.php b/src/Doctrine/Orm/Filter/NumericFilter.php index 71e58419c4f..661e96a5a9d 100644 --- a/src/Doctrine/Orm/Filter/NumericFilter.php +++ b/src/Doctrine/Orm/Filter/NumericFilter.php @@ -128,7 +128,7 @@ final class NumericFilter extends AbstractFilter implements JsonSchemaFilterInte /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void + protected function filterProperty(string $property, mixed $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void { if ( !$this->isPropertyEnabled($property, $resourceClass) diff --git a/src/Doctrine/Orm/Filter/OrderFilter.php b/src/Doctrine/Orm/Filter/OrderFilter.php index 61b3a65be4c..4962bf26e2c 100644 --- a/src/Doctrine/Orm/Filter/OrderFilter.php +++ b/src/Doctrine/Orm/Filter/OrderFilter.php @@ -252,7 +252,7 @@ public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $q /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void + protected function filterProperty(string $property, mixed $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void { if (!$this->isPropertyEnabled($property, $resourceClass) || !$this->isPropertyMapped($property, $resourceClass)) { return; diff --git a/src/Doctrine/Orm/Filter/RangeFilter.php b/src/Doctrine/Orm/Filter/RangeFilter.php index 6a1ec3ae612..240010077e3 100644 --- a/src/Doctrine/Orm/Filter/RangeFilter.php +++ b/src/Doctrine/Orm/Filter/RangeFilter.php @@ -116,7 +116,7 @@ final class RangeFilter extends AbstractFilter implements RangeFilterInterface, /** * {@inheritdoc} */ - protected function filterProperty(string $property, $values, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void + protected function filterProperty(string $property, mixed $values, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void { if ( !\is_array($values) diff --git a/src/Doctrine/Orm/Filter/SearchFilter.php b/src/Doctrine/Orm/Filter/SearchFilter.php index d0caccb94d4..a93a8c197c9 100644 --- a/src/Doctrine/Orm/Filter/SearchFilter.php +++ b/src/Doctrine/Orm/Filter/SearchFilter.php @@ -161,7 +161,7 @@ protected function getPropertyAccessor(): PropertyAccessorInterface /** * {@inheritdoc} */ - protected function filterProperty(string $property, $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void + protected function filterProperty(string $property, mixed $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void { if ( null === $value diff --git a/src/Elasticsearch/Serializer/ItemNormalizer.php b/src/Elasticsearch/Serializer/ItemNormalizer.php index 3227c19502a..01c5020a40e 100644 --- a/src/Elasticsearch/Serializer/ItemNormalizer.php +++ b/src/Elasticsearch/Serializer/ItemNormalizer.php @@ -77,6 +77,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return DocumentNormalizer::FORMAT !== $format && $this->decorated->supportsNormalization($data, $format); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return DocumentNormalizer::FORMAT !== $format ? $this->decorated->getSupportedTypes($format) : []; diff --git a/src/GraphQl/Action/GraphiQlAction.php b/src/GraphQl/Action/GraphiQlAction.php index dc6c0119483..ca67f91e030 100644 --- a/src/GraphQl/Action/GraphiQlAction.php +++ b/src/GraphQl/Action/GraphiQlAction.php @@ -26,6 +26,9 @@ */ final class GraphiQlAction { + /** + * @param string|null $assetPackage + */ public function __construct(private readonly TwigEnvironment $twig, private readonly RouterInterface $router, private readonly bool $graphiqlEnabled = false, private readonly string $title = '', private $assetPackage = null) { } diff --git a/src/GraphQl/ExecutorInterface.php b/src/GraphQl/ExecutorInterface.php index fafc326ee6f..180dbdaa390 100644 --- a/src/GraphQl/ExecutorInterface.php +++ b/src/GraphQl/ExecutorInterface.php @@ -25,6 +25,8 @@ interface ExecutorInterface { /** * @see http://webonyx.github.io/graphql-php/executing-queries/#using-facade-method + * + * @param mixed $source */ public function executeQuery(Schema $schema, $source, mixed $rootValue = null, mixed $context = null, ?array $variableValues = null, ?string $operationName = null, ?callable $fieldResolver = null, ?array $validationRules = null): ExecutionResult; } diff --git a/src/GraphQl/Resolver/ResourceFieldResolver.php b/src/GraphQl/Resolver/ResourceFieldResolver.php index 54b08218928..59e7a1596ab 100644 --- a/src/GraphQl/Resolver/ResourceFieldResolver.php +++ b/src/GraphQl/Resolver/ResourceFieldResolver.php @@ -32,6 +32,9 @@ public function __construct(private readonly IriConverterInterface $iriConverter { } + /** + * @param array $context + */ public function __invoke(?array $source, array $args, $context, ResolveInfo $info): mixed { $property = null; diff --git a/src/GraphQl/Serializer/Exception/ErrorNormalizer.php b/src/GraphQl/Serializer/Exception/ErrorNormalizer.php index ec9ecf772a8..47e8721df45 100644 --- a/src/GraphQl/Serializer/Exception/ErrorNormalizer.php +++ b/src/GraphQl/Serializer/Exception/ErrorNormalizer.php @@ -40,6 +40,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return $data instanceof Error; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return [ diff --git a/src/GraphQl/Serializer/Exception/HttpExceptionNormalizer.php b/src/GraphQl/Serializer/Exception/HttpExceptionNormalizer.php index 3f16e4ef46c..86b3242b159 100644 --- a/src/GraphQl/Serializer/Exception/HttpExceptionNormalizer.php +++ b/src/GraphQl/Serializer/Exception/HttpExceptionNormalizer.php @@ -51,6 +51,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return $data instanceof Error && $data->getPrevious() instanceof HttpExceptionInterface; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return [ diff --git a/src/GraphQl/Serializer/Exception/RuntimeExceptionNormalizer.php b/src/GraphQl/Serializer/Exception/RuntimeExceptionNormalizer.php index cf7e3a449f1..bc12ff5ebdf 100644 --- a/src/GraphQl/Serializer/Exception/RuntimeExceptionNormalizer.php +++ b/src/GraphQl/Serializer/Exception/RuntimeExceptionNormalizer.php @@ -45,6 +45,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return $data instanceof Error && $data->getPrevious() instanceof \RuntimeException; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return [ diff --git a/src/GraphQl/Serializer/Exception/ValidationExceptionNormalizer.php b/src/GraphQl/Serializer/Exception/ValidationExceptionNormalizer.php index df9f096d596..b792fb15b89 100644 --- a/src/GraphQl/Serializer/Exception/ValidationExceptionNormalizer.php +++ b/src/GraphQl/Serializer/Exception/ValidationExceptionNormalizer.php @@ -80,6 +80,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return $data instanceof Error && ($data->getPrevious() instanceof ConstraintViolationListAwareExceptionInterface); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return [ diff --git a/src/GraphQl/Serializer/ItemNormalizer.php b/src/GraphQl/Serializer/ItemNormalizer.php index 06ea9df299a..1948733e1d2 100644 --- a/src/GraphQl/Serializer/ItemNormalizer.php +++ b/src/GraphQl/Serializer/ItemNormalizer.php @@ -62,6 +62,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && parent::supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? parent::getSupportedTypes($format) : []; @@ -149,8 +152,12 @@ protected function getAllowedAttributes(string|object $classOrObject, array $con /** * {@inheritdoc} + * + * @param object $object + * @param string $attribute + * @param string|null $format */ - protected function setAttributeValue($object, $attribute, $value, $format = null, array $context = []): void + protected function setAttributeValue($object, $attribute, mixed $value, $format = null, array $context = []): void { if ('_id' === $attribute) { $attribute = 'id'; diff --git a/src/GraphQl/Serializer/ObjectNormalizer.php b/src/GraphQl/Serializer/ObjectNormalizer.php index 40c93cd2d71..4d19750a560 100644 --- a/src/GraphQl/Serializer/ObjectNormalizer.php +++ b/src/GraphQl/Serializer/ObjectNormalizer.php @@ -43,6 +43,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && $this->decorated->supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? $this->decorated->getSupportedTypes($format) : []; diff --git a/src/Hal/Serializer/EntrypointNormalizer.php b/src/Hal/Serializer/EntrypointNormalizer.php index 2756a35d41a..d8c8399c9fd 100644 --- a/src/Hal/Serializer/EntrypointNormalizer.php +++ b/src/Hal/Serializer/EntrypointNormalizer.php @@ -73,6 +73,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && $data instanceof Entrypoint; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? [Entrypoint::class => true] : []; diff --git a/src/Hal/Serializer/ItemNormalizer.php b/src/Hal/Serializer/ItemNormalizer.php index cde2efac85f..4bd0dcbb0de 100644 --- a/src/Hal/Serializer/ItemNormalizer.php +++ b/src/Hal/Serializer/ItemNormalizer.php @@ -81,6 +81,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && parent::supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? parent::getSupportedTypes($format) : []; @@ -154,7 +157,7 @@ public function denormalize(mixed $data, string $type, ?string $format = null, a /** * {@inheritdoc} */ - protected function getAttributes($object, $format = null, array $context = []): array + protected function getAttributes(object $object, ?string $format = null, array $context = []): array { return $this->getComponents($object, $format, $context)['states']; } diff --git a/src/Hal/Serializer/ObjectNormalizer.php b/src/Hal/Serializer/ObjectNormalizer.php index f52903b877f..ef1d480a811 100644 --- a/src/Hal/Serializer/ObjectNormalizer.php +++ b/src/Hal/Serializer/ObjectNormalizer.php @@ -38,6 +38,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && $this->decorated->supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? $this->decorated->getSupportedTypes($format) : []; diff --git a/src/Hydra/Serializer/CollectionFiltersNormalizer.php b/src/Hydra/Serializer/CollectionFiltersNormalizer.php index 44db5251c4e..17147293ae2 100644 --- a/src/Hydra/Serializer/CollectionFiltersNormalizer.php +++ b/src/Hydra/Serializer/CollectionFiltersNormalizer.php @@ -59,6 +59,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return $this->collectionNormalizer->supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return $this->collectionNormalizer->getSupportedTypes($format); diff --git a/src/Hydra/Serializer/DocumentationNormalizer.php b/src/Hydra/Serializer/DocumentationNormalizer.php index ce6b1eb4d82..b565fc4e0c6 100644 --- a/src/Hydra/Serializer/DocumentationNormalizer.php +++ b/src/Hydra/Serializer/DocumentationNormalizer.php @@ -685,6 +685,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && $data instanceof Documentation; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? [Documentation::class => true] : []; diff --git a/src/Hydra/Serializer/EntrypointNormalizer.php b/src/Hydra/Serializer/EntrypointNormalizer.php index 92eb44a6406..77dda8539eb 100644 --- a/src/Hydra/Serializer/EntrypointNormalizer.php +++ b/src/Hydra/Serializer/EntrypointNormalizer.php @@ -82,6 +82,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && $data instanceof Entrypoint; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? [Entrypoint::class => true] : []; diff --git a/src/Hydra/Serializer/PartialCollectionViewNormalizer.php b/src/Hydra/Serializer/PartialCollectionViewNormalizer.php index 59932f2e2f4..e9d3a446c79 100644 --- a/src/Hydra/Serializer/PartialCollectionViewNormalizer.php +++ b/src/Hydra/Serializer/PartialCollectionViewNormalizer.php @@ -117,6 +117,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return $this->collectionNormalizer->supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return $this->collectionNormalizer->getSupportedTypes($format); @@ -132,6 +135,9 @@ public function setNormalizer(NormalizerInterface $normalizer): void } } + /** + * @param object $object + */ private function cursorPaginationFields(array $fields, int $direction, $object): array { $paginationFilters = []; diff --git a/src/JsonApi/Serializer/CollectionNormalizer.php b/src/JsonApi/Serializer/CollectionNormalizer.php index e465b6ff5fe..1c1f362ce0d 100644 --- a/src/JsonApi/Serializer/CollectionNormalizer.php +++ b/src/JsonApi/Serializer/CollectionNormalizer.php @@ -38,7 +38,7 @@ public function __construct(ResourceClassResolverInterface $resourceClassResolve /** * {@inheritdoc} */ - protected function getPaginationData($object, array $context = []): array + protected function getPaginationData(iterable $object, array $context = []): array { [$paginator, $paginated, $currentPage, $itemsPerPage, $lastPage, $pageTotalItems, $totalItems] = $this->getPaginationConfig($object, $context); $parsed = IriHelper::parseIri($context['uri'] ?? '/', $this->pageParameterName); @@ -84,7 +84,7 @@ protected function getPaginationData($object, array $context = []): array * * @throws UnexpectedValueException */ - protected function getItemsData($object, ?string $format = null, array $context = []): array + protected function getItemsData(iterable $object, ?string $format = null, array $context = []): array { $data = [ 'data' => [], diff --git a/src/JsonApi/Serializer/ConstraintViolationListNormalizer.php b/src/JsonApi/Serializer/ConstraintViolationListNormalizer.php index b153b65a08b..53ed7e8ce4d 100644 --- a/src/JsonApi/Serializer/ConstraintViolationListNormalizer.php +++ b/src/JsonApi/Serializer/ConstraintViolationListNormalizer.php @@ -60,6 +60,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && $data instanceof ConstraintViolationListInterface; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? [ConstraintViolationListInterface::class => true] : []; diff --git a/src/JsonApi/Serializer/EntrypointNormalizer.php b/src/JsonApi/Serializer/EntrypointNormalizer.php index f49411d766a..394bcb3cc39 100644 --- a/src/JsonApi/Serializer/EntrypointNormalizer.php +++ b/src/JsonApi/Serializer/EntrypointNormalizer.php @@ -73,6 +73,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && $data instanceof Entrypoint; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? [Entrypoint::class => true] : []; diff --git a/src/JsonApi/Serializer/ErrorNormalizer.php b/src/JsonApi/Serializer/ErrorNormalizer.php index af619b81e46..a9eba146f8f 100644 --- a/src/JsonApi/Serializer/ErrorNormalizer.php +++ b/src/JsonApi/Serializer/ErrorNormalizer.php @@ -75,6 +75,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && ($data instanceof \Exception || $data instanceof FlattenException); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { if (self::FORMAT === $format) { diff --git a/src/JsonApi/Serializer/ItemNormalizer.php b/src/JsonApi/Serializer/ItemNormalizer.php index 179462f57f2..47a5879a4b4 100644 --- a/src/JsonApi/Serializer/ItemNormalizer.php +++ b/src/JsonApi/Serializer/ItemNormalizer.php @@ -72,6 +72,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && parent::supportsNormalization($data, $format, $context) && !($data instanceof \Exception || $data instanceof FlattenException); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? parent::getSupportedTypes($format) : []; diff --git a/src/JsonApi/Serializer/ObjectNormalizer.php b/src/JsonApi/Serializer/ObjectNormalizer.php index 196c12aaa6b..1fd986b2dbb 100644 --- a/src/JsonApi/Serializer/ObjectNormalizer.php +++ b/src/JsonApi/Serializer/ObjectNormalizer.php @@ -41,6 +41,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && $this->decorated->supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? $this->decorated->getSupportedTypes($format) : []; diff --git a/src/JsonLd/Serializer/ItemNormalizer.php b/src/JsonLd/Serializer/ItemNormalizer.php index cc523adf6bd..0d1a74268c6 100644 --- a/src/JsonLd/Serializer/ItemNormalizer.php +++ b/src/JsonLd/Serializer/ItemNormalizer.php @@ -83,6 +83,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && parent::supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? parent::getSupportedTypes($format) : []; diff --git a/src/JsonLd/Serializer/JsonLdContextTrait.php b/src/JsonLd/Serializer/JsonLdContextTrait.php index 7b2d98b2cc7..79008dfe41c 100644 --- a/src/JsonLd/Serializer/JsonLdContextTrait.php +++ b/src/JsonLd/Serializer/JsonLdContextTrait.php @@ -48,7 +48,7 @@ private function addJsonLdContext(ContextBuilderInterface $contextBuilder, strin return $data; } - private function createJsonLdContext(AnonymousContextBuilderInterface $contextBuilder, $object, array &$context): array + private function createJsonLdContext(AnonymousContextBuilderInterface $contextBuilder, object $object, array &$context): array { $anonymousContext = ($context['output'] ?? []) + ['api_resource' => $context['api_resource'] ?? null]; diff --git a/src/JsonLd/Serializer/ObjectNormalizer.php b/src/JsonLd/Serializer/ObjectNormalizer.php index a7816eee5ec..23659458c91 100644 --- a/src/JsonLd/Serializer/ObjectNormalizer.php +++ b/src/JsonLd/Serializer/ObjectNormalizer.php @@ -40,6 +40,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return self::FORMAT === $format && $this->decorated->supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return self::FORMAT === $format ? $this->decorated->getSupportedTypes($format) : []; diff --git a/src/Metadata/ApiProperty.php b/src/Metadata/ApiProperty.php index 597f64c3ba6..6925cce3047 100644 --- a/src/Metadata/ApiProperty.php +++ b/src/Metadata/ApiProperty.php @@ -376,6 +376,9 @@ public function getDeprecationReason(): ?string return $this->deprecationReason; } + /** + * @param string $deprecationReason + */ public function withDeprecationReason($deprecationReason): static { $self = clone $this; @@ -389,6 +392,9 @@ public function isFetchable(): ?bool return $this->fetchable; } + /** + * @param bool $fetchable + */ public function withFetchable($fetchable): static { $self = clone $this; @@ -402,6 +408,9 @@ public function getFetchEager(): ?bool return $this->fetchEager; } + /** + * @param bool $fetchEager + */ public function withFetchEager($fetchEager): static { $self = clone $this; @@ -415,6 +424,9 @@ public function getJsonldContext(): ?array return $this->jsonldContext; } + /** + * @param array $jsonldContext + */ public function withJsonldContext($jsonldContext): static { $self = clone $this; @@ -428,6 +440,9 @@ public function getOpenapiContext(): ?array return $this->openapiContext; } + /** + * @param array $openapiContext + */ public function withOpenapiContext($openapiContext): static { $self = clone $this; @@ -441,6 +456,9 @@ public function getJsonSchemaContext(): ?array return $this->jsonSchemaContext; } + /** + * @param array $jsonSchemaContext + */ public function withJsonSchemaContext($jsonSchemaContext): static { $self = clone $this; @@ -454,6 +472,9 @@ public function getPush(): ?bool return $this->push; } + /** + * @param bool $push + */ public function withPush($push): static { $self = clone $this; @@ -467,7 +488,7 @@ public function getSecurity(): ?string return $this->security instanceof \Stringable ? (string) $this->security : $this->security; } - public function withSecurity($security): static + public function withSecurity(string|\Stringable|null $security = null): static { $self = clone $this; $self->security = $security; @@ -480,7 +501,7 @@ public function getSecurityPostDenormalize(): ?string return $this->securityPostDenormalize instanceof \Stringable ? (string) $this->securityPostDenormalize : $this->securityPostDenormalize; } - public function withSecurityPostDenormalize($securityPostDenormalize): static + public function withSecurityPostDenormalize(string|\Stringable|null $securityPostDenormalize = null): static { $self = clone $this; $self->securityPostDenormalize = $securityPostDenormalize; diff --git a/src/Metadata/ErrorResource.php b/src/Metadata/ErrorResource.php index b0ed5a30336..a232c866e9b 100644 --- a/src/Metadata/ErrorResource.php +++ b/src/Metadata/ErrorResource.php @@ -25,9 +25,9 @@ public function __construct( ?string $description = null, array|string|null $types = null, $operations = null, - $formats = null, - $inputFormats = null, - $outputFormats = null, + array|string|null $formats = null, + array|string|null $inputFormats = null, + array|string|null $outputFormats = null, $uriVariables = null, ?string $routePrefix = null, ?array $defaults = null, diff --git a/src/Metadata/HttpOperation.php b/src/Metadata/HttpOperation.php index 493459a4676..4ecec52f33d 100644 --- a/src/Metadata/HttpOperation.php +++ b/src/Metadata/HttpOperation.php @@ -468,6 +468,9 @@ public function getStateless(): ?bool return $this->stateless; } + /** + * @param bool $stateless + */ public function withStateless($stateless): static { $self = clone $this; diff --git a/src/Metadata/Metadata.php b/src/Metadata/Metadata.php index 5f5bf50b5c3..da0d7e2fe25 100644 --- a/src/Metadata/Metadata.php +++ b/src/Metadata/Metadata.php @@ -155,6 +155,9 @@ public function getDeprecationReason(): ?string return $this->deprecationReason; } + /** + * @param string $deprecationReason + */ public function withDeprecationReason($deprecationReason): static { $self = clone $this; @@ -457,7 +460,7 @@ public function getSecurity(): ?string return $this->security instanceof \Stringable ? (string) $this->security : $this->security; } - public function withSecurity($security): static + public function withSecurity(string|\Stringable|null $security = null): static { $self = clone $this; $self->security = $security; @@ -483,7 +486,7 @@ public function getSecurityPostDenormalize(): ?string return $this->securityPostDenormalize instanceof \Stringable ? (string) $this->securityPostDenormalize : $this->securityPostDenormalize; } - public function withSecurityPostDenormalize($securityPostDenormalize): static + public function withSecurityPostDenormalize(string|\Stringable|null $securityPostDenormalize = null): static { $self = clone $this; $self->securityPostDenormalize = $securityPostDenormalize; diff --git a/src/Metadata/Util/IriHelper.php b/src/Metadata/Util/IriHelper.php index 6a142d11154..7803562cf94 100644 --- a/src/Metadata/Util/IriHelper.php +++ b/src/Metadata/Util/IriHelper.php @@ -55,6 +55,8 @@ public static function parseIri(string $iri, string $pageParameterName): array /** * Gets a collection IRI for the given parameters. + * + * @param int $urlGenerationStrategy */ public static function createIri(array $parts, array $parameters, ?string $pageParameterName = null, ?float $page = null, $urlGenerationStrategy = UrlGeneratorInterface::ABS_PATH): string { diff --git a/src/OpenApi/Model/ExtensionTrait.php b/src/OpenApi/Model/ExtensionTrait.php index 903c42bcdfc..f91f6bc11a9 100644 --- a/src/OpenApi/Model/ExtensionTrait.php +++ b/src/OpenApi/Model/ExtensionTrait.php @@ -17,7 +17,7 @@ trait ExtensionTrait { private array $extensionProperties = []; - public function withExtensionProperty(string $key, $value): mixed + public function withExtensionProperty(string $key, mixed $value): mixed { if (!str_starts_with($key, 'x-')) { $key = 'x-'.$key; diff --git a/src/OpenApi/Model/Header.php b/src/OpenApi/Model/Header.php index 271cb981e3a..fac71e45b26 100644 --- a/src/OpenApi/Model/Header.php +++ b/src/OpenApi/Model/Header.php @@ -163,7 +163,7 @@ public function withAllowReserved(bool $allowReserved): self return $clone; } - public function withExample($example): self + public function withExample(mixed $example): self { $clone = clone $this; $clone->example = $example; diff --git a/src/OpenApi/Model/MediaType.php b/src/OpenApi/Model/MediaType.php index 25be3431c9a..ea50465398f 100644 --- a/src/OpenApi/Model/MediaType.php +++ b/src/OpenApi/Model/MediaType.php @@ -17,7 +17,7 @@ final class MediaType { use ExtensionTrait; - public function __construct(private ?\ArrayObject $schema = null, private $example = null, private ?\ArrayObject $examples = null, private ?Encoding $encoding = null) + public function __construct(private ?\ArrayObject $schema = null, private mixed $example = null, private ?\ArrayObject $examples = null, private ?Encoding $encoding = null) { } @@ -49,7 +49,7 @@ public function withSchema(\ArrayObject $schema): self return $clone; } - public function withExample($example): self + public function withExample(mixed $example): self { $clone = clone $this; $clone->example = $example; diff --git a/src/OpenApi/Model/Operation.php b/src/OpenApi/Model/Operation.php index db2aac878be..5ee455d70ac 100644 --- a/src/OpenApi/Model/Operation.php +++ b/src/OpenApi/Model/Operation.php @@ -22,6 +22,9 @@ public function __construct(private ?string $operationId = null, private ?array $this->extensionProperties = $extensionProperties; } + /** + * @param string $status + */ public function addResponse(Response $response, $status = 'default'): self { $this->responses[$status] = $response; diff --git a/src/OpenApi/OpenApi.php b/src/OpenApi/OpenApi.php index 943a6398233..61a43d7d490 100644 --- a/src/OpenApi/OpenApi.php +++ b/src/OpenApi/OpenApi.php @@ -27,6 +27,9 @@ final class OpenApi private string $openapi = self::VERSION; private Components $components; + /** + * @param array|null $externalDocs + */ public function __construct(private Info $info, private array $servers, private Paths $paths, ?Components $components = null, private array $security = [], private array $tags = [], private $externalDocs = null, private ?string $jsonSchemaDialect = null, private readonly ?\ArrayObject $webhooks = null) { $this->components = $components ?? new Components(); diff --git a/src/OpenApi/Serializer/ApiGatewayNormalizer.php b/src/OpenApi/Serializer/ApiGatewayNormalizer.php index 534b05e731b..f8fadeb5cc5 100644 --- a/src/OpenApi/Serializer/ApiGatewayNormalizer.php +++ b/src/OpenApi/Serializer/ApiGatewayNormalizer.php @@ -32,7 +32,7 @@ final class ApiGatewayNormalizer implements NormalizerInterface self::API_GATEWAY => false, ]; - public function __construct(private readonly NormalizerInterface $documentationNormalizer, $defaultContext = []) + public function __construct(private readonly NormalizerInterface $documentationNormalizer, array $defaultContext = []) { $this->defaultContext = array_merge($this->defaultContext, $defaultContext); } @@ -119,6 +119,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return $this->documentationNormalizer->supportsNormalization($data, $format); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return $this->documentationNormalizer->getSupportedTypes($format); diff --git a/src/OpenApi/Serializer/LegacyOpenApiNormalizer.php b/src/OpenApi/Serializer/LegacyOpenApiNormalizer.php index dc203c77e28..d306821933c 100644 --- a/src/OpenApi/Serializer/LegacyOpenApiNormalizer.php +++ b/src/OpenApi/Serializer/LegacyOpenApiNormalizer.php @@ -22,7 +22,7 @@ final class LegacyOpenApiNormalizer implements NormalizerInterface self::SPEC_VERSION => '3.1.0', ]; - public function __construct(private readonly NormalizerInterface $decorated, $defaultContext = []) + public function __construct(private readonly NormalizerInterface $decorated, array $defaultContext = []) { $this->defaultContext = array_merge($this->defaultContext, $defaultContext); } @@ -64,6 +64,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return $this->decorated->supportsNormalization($data, $format, $context); } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return $this->decorated->getSupportedTypes($format); diff --git a/src/OpenApi/Serializer/OpenApiNormalizer.php b/src/OpenApi/Serializer/OpenApiNormalizer.php index a5f1c2c4e19..21c26380202 100644 --- a/src/OpenApi/Serializer/OpenApiNormalizer.php +++ b/src/OpenApi/Serializer/OpenApiNormalizer.php @@ -76,6 +76,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return (self::FORMAT === $format || self::JSON_FORMAT === $format || self::YAML_FORMAT === $format) && $data instanceof OpenApi; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return (self::FORMAT === $format || self::JSON_FORMAT === $format || self::YAML_FORMAT === $format) ? [OpenApi::class => true] : []; diff --git a/src/Serializer/AbstractConstraintViolationListNormalizer.php b/src/Serializer/AbstractConstraintViolationListNormalizer.php index 35907174547..241b16fe80c 100644 --- a/src/Serializer/AbstractConstraintViolationListNormalizer.php +++ b/src/Serializer/AbstractConstraintViolationListNormalizer.php @@ -50,6 +50,9 @@ public function supportsNormalization(mixed $data, ?string $format = null, array return static::FORMAT === $format && $data instanceof ConstraintViolationListInterface; } + /** + * @param string|null $format + */ public function getSupportedTypes($format): array { return $format === static::FORMAT ? [ConstraintViolationListInterface::class => true] : []; diff --git a/src/Serializer/AbstractItemNormalizer.php b/src/Serializer/AbstractItemNormalizer.php index cd1f08ddc49..b6d1f6497ab 100644 --- a/src/Serializer/AbstractItemNormalizer.php +++ b/src/Serializer/AbstractItemNormalizer.php @@ -413,7 +413,7 @@ protected function getClassDiscriminatorResolvedClass(array $data, string $class return $mappedClass; } - protected function createConstructorArgument($parameterData, string $key, \ReflectionParameter $constructorParameter, array $context, ?string $format = null): mixed + protected function createConstructorArgument(mixed $parameterData, string $key, \ReflectionParameter $constructorParameter, array $context, ?string $format = null): mixed { return $this->createAndValidateAttributeValue($constructorParameter->name, $parameterData, $format, $context); } @@ -423,6 +423,9 @@ protected function createConstructorArgument($parameterData, string $key, \Refle * * Unused in this context. * + * @param object $object + * @param string|null $format + * * @return string[] */ protected function extractAttributes($object, $format = null, array $context = []): array @@ -1079,9 +1082,7 @@ private function createAttributeValue(string $attribute, mixed $value, ?string $ private function createAndValidateAttributeValue(string $attribute, mixed $value, ?string $format = null, array $context = []): mixed { $propertyMetadata = $this->propertyMetadataFactory->create($context['resource_class'], $attribute, $this->getFactoryOptions($context)); - $denormalizationException = null; - $types = []; $type = null; if (!method_exists(PropertyInfoExtractor::class, 'getType')) { $types = $propertyMetadata->getBuiltinTypes() ?? []; @@ -1090,7 +1091,6 @@ private function createAndValidateAttributeValue(string $attribute, mixed $value $types = $type instanceof CompositeTypeInterface ? $type->getTypes() : (null === $type ? [] : [$type]); } - $isMultipleTypes = \count($types) > 1; $className = null; $typeIsResourceClass = function (Type $type) use (&$className): bool { return $type instanceof ObjectType ? $this->resourceClassResolver->isResourceClass($className = $type->getClassName()) : false; diff --git a/src/Serializer/Filter/PropertyFilter.php b/src/Serializer/Filter/PropertyFilter.php index c0ea9a2461e..01f36dfc0b1 100644 --- a/src/Serializer/Filter/PropertyFilter.php +++ b/src/Serializer/Filter/PropertyFilter.php @@ -262,7 +262,7 @@ private function denormalizeProperties(array $properties): array return $result; } - private function denormalizePropertyName($property): string + private function denormalizePropertyName(string $property): string { return null !== $this->nameConverter ? $this->nameConverter->denormalize($property) : $property; } diff --git a/src/Serializer/ItemNormalizer.php b/src/Serializer/ItemNormalizer.php index c426584aa8d..f19c9f16253 100644 --- a/src/Serializer/ItemNormalizer.php +++ b/src/Serializer/ItemNormalizer.php @@ -16,6 +16,7 @@ use ApiPlatform\Metadata\Exception\InvalidArgumentException; use ApiPlatform\Metadata\HttpOperation; use ApiPlatform\Metadata\IriConverterInterface; +use ApiPlatform\Metadata\Operation; use ApiPlatform\Metadata\Property\Factory\PropertyMetadataFactoryInterface; use ApiPlatform\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface; use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface; @@ -93,15 +94,17 @@ private function updateObjectToPopulate(array $data, array &$context): void } } - private function getContextUriVariables(array $data, $operation, array $context): array + private function getContextUriVariables(array $data, Operation $operation, array $context): array { $uriVariables = $context['uri_variables'] ?? []; - $operationUriVariables = $operation->getUriVariables(); - if ((null !== $uriVariable = array_shift($operationUriVariables)) && \count($uriVariable->getIdentifiers())) { - $identifier = $uriVariable->getIdentifiers()[0]; - if (isset($data[$identifier])) { - $uriVariables[$uriVariable->getParameterName()] = $data[$identifier]; + if ($operation instanceof HttpOperation) { + $operationUriVariables = $operation->getUriVariables(); + if ((null !== $uriVariable = array_shift($operationUriVariables)) && \count($uriVariable->getIdentifiers())) { + $identifier = $uriVariable->getIdentifiers()[0]; + if (isset($data[$identifier])) { + $uriVariables[$uriVariable->getParameterName()] = $data[$identifier]; + } } } diff --git a/src/Serializer/Mapping/Factory/ClassMetadataFactory.php b/src/Serializer/Mapping/Factory/ClassMetadataFactory.php index 232b294e863..d983d91ce7f 100644 --- a/src/Serializer/Mapping/Factory/ClassMetadataFactory.php +++ b/src/Serializer/Mapping/Factory/ClassMetadataFactory.php @@ -27,6 +27,8 @@ public function __construct(private readonly ClassMetadataFactoryInterface $deco /** * {@inheritdoc} + * + * @param string|object $value */ public function getMetadataFor($value): ClassMetadataInterface { @@ -38,6 +40,12 @@ public function getMetadataFor($value): ClassMetadataInterface */ public function hasMetadataFor(mixed $value): bool { - return $this->decorated->hasMetadataFor(\is_object($value) ? $this->getObjectClass($value) : $this->getRealClassName($value)); + if (\is_object($value)) { + $value = $this->getObjectClass($value); + } elseif (\is_string($value)) { + $value = $this->getRealClassName($value); + } + + return $this->decorated->hasMetadataFor($value); } } diff --git a/src/Symfony/Bundle/Command/DebugResourceCommand.php b/src/Symfony/Bundle/Command/DebugResourceCommand.php index 65eb6685d40..f4a8ed8ffc4 100644 --- a/src/Symfony/Bundle/Command/DebugResourceCommand.php +++ b/src/Symfony/Bundle/Command/DebugResourceCommand.php @@ -22,10 +22,14 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ChoiceQuestion; use Symfony\Component\VarDumper\Cloner\ClonerInterface; +use Symfony\Component\VarDumper\Dumper\DataDumperInterface; #[AsCommand(name: 'debug:api-resource')] final class DebugResourceCommand extends Command { + /** + * @param DataDumperInterface $dumper + */ public function __construct(private readonly ResourceMetadataCollectionFactoryInterface $resourceMetadataCollectionFactory, private readonly ClonerInterface $cloner, private $dumper) { parent::__construct(); diff --git a/src/Symfony/Bundle/SwaggerUi/SwaggerUiContext.php b/src/Symfony/Bundle/SwaggerUi/SwaggerUiContext.php index 654bcf90f96..e0240c9c717 100644 --- a/src/Symfony/Bundle/SwaggerUi/SwaggerUiContext.php +++ b/src/Symfony/Bundle/SwaggerUi/SwaggerUiContext.php @@ -15,6 +15,9 @@ final class SwaggerUiContext { + /** + * @param string|null $assetPackage + */ public function __construct(private readonly bool $swaggerUiEnabled = false, private readonly bool $showWebby = true, private readonly bool $reDocEnabled = false, private readonly bool $graphQlEnabled = false, private readonly bool $graphiQlEnabled = false, private $assetPackage = null, private readonly array $extraConfiguration = []) { }