diff --git a/src/Doctrine/Orm/Extension/ParameterExtension.php b/src/Doctrine/Orm/Extension/ParameterExtension.php index 5a934c8315..902bef984b 100644 --- a/src/Doctrine/Orm/Extension/ParameterExtension.php +++ b/src/Doctrine/Orm/Extension/ParameterExtension.php @@ -22,6 +22,8 @@ use Psr\Container\ContainerInterface; /** + * Reads operation parameters and execute its filter. + * * @author Antoine Bluchet */ final class ParameterExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface @@ -47,7 +49,6 @@ private function applyFilter(QueryBuilder $queryBuilder, QueryNameGeneratorInter } $parameters = $parameter instanceof HeaderParameterInterface ? $request->attributes->get('_api_header_parameters') : $request->attributes->get('_api_query_parameters'); - $parsedKey = explode('[:property]', $key); if (isset($parsedKey[0]) && isset($parameters[$parsedKey[0]])) { $key = $parsedKey[0]; diff --git a/src/Doctrine/Orm/Filter/AbstractFilter.php b/src/Doctrine/Orm/Filter/AbstractFilter.php index 5f6211f692..444fb44ecd 100644 --- a/src/Doctrine/Orm/Filter/AbstractFilter.php +++ b/src/Doctrine/Orm/Filter/AbstractFilter.php @@ -29,7 +29,7 @@ abstract class AbstractFilter implements FilterInterface use PropertyHelperTrait; protected LoggerInterface $logger; - public function __construct(protected ManagerRegistry $managerRegistry, ?LoggerInterface $logger = null, public ?array $properties = null, protected ?NameConverterInterface $nameConverter = null) + public function __construct(protected ManagerRegistry $managerRegistry, ?LoggerInterface $logger = null, protected ?array $properties = null, protected ?NameConverterInterface $nameConverter = null) { $this->logger = $logger ?? new NullLogger(); } @@ -64,6 +64,14 @@ protected function getLogger(): LoggerInterface return $this->logger; } + /** + * @param string[] $properties + */ + public function setProperties(array $properties): void + { + $this->properties = $properties; + } + /** * Determines whether the given property is enabled. */ diff --git a/src/Hydra/Serializer/CollectionFiltersNormalizer.php b/src/Hydra/Serializer/CollectionFiltersNormalizer.php index 080a246560..2bf0f0c7d7 100644 --- a/src/Hydra/Serializer/CollectionFiltersNormalizer.php +++ b/src/Hydra/Serializer/CollectionFiltersNormalizer.php @@ -175,6 +175,7 @@ private function getSearch(string $resourceClass, array $parts, array $filters, continue; } + // :property is a pattern allowed when defining parameters $k = str_replace(':property', $description['property'], $key); $variable = str_replace($description['property'], $k, $variable); $variables[] = $variable; diff --git a/src/Metadata/ApiFilter.php b/src/Metadata/ApiFilter.php index 590b996b2d..0e6004fcf2 100644 --- a/src/Metadata/ApiFilter.php +++ b/src/Metadata/ApiFilter.php @@ -26,7 +26,7 @@ final class ApiFilter { /** * @param string|class-string|class-string $filterClass - * @param string $alias a service alias to be referenced in a Parameter + * @param string $alias a filter tag alias to be referenced in a Parameter */ public function __construct( public string $filterClass, diff --git a/src/Metadata/Parameters.php b/src/Metadata/Parameters.php index 6c1e9902d2..a562774d23 100644 --- a/src/Metadata/Parameters.php +++ b/src/Metadata/Parameters.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Metadata; /** - * An parameter dictionnary. + * A parameter dictionnary. * * @implements \IteratorAggregate */ diff --git a/src/Metadata/Resource/Factory/ParameterResourceMetadataCollectionFactory.php b/src/Metadata/Resource/Factory/ParameterResourceMetadataCollectionFactory.php index 77b41c0c4d..02aa9f10c4 100644 --- a/src/Metadata/Resource/Factory/ParameterResourceMetadataCollectionFactory.php +++ b/src/Metadata/Resource/Factory/ParameterResourceMetadataCollectionFactory.php @@ -22,6 +22,8 @@ use Psr\Container\ContainerInterface; /** + * Prepares Parameters documentation by reading its filter details and declaring an OpenApi parameter. + * * @experimental */ final class ParameterResourceMetadataCollectionFactory implements ResourceMetadataCollectionFactoryInterface diff --git a/tests/Fixtures/TestBundle/Filter/SearchFilterValueTransformer.php b/tests/Fixtures/TestBundle/Filter/SearchFilterValueTransformer.php index e97ddf04d0..64e9e3768e 100644 --- a/tests/Fixtures/TestBundle/Filter/SearchFilterValueTransformer.php +++ b/tests/Fixtures/TestBundle/Filter/SearchFilterValueTransformer.php @@ -23,7 +23,7 @@ final class SearchFilterValueTransformer implements FilterInterface { public function __construct(#[Autowire('@api_platform.doctrine.orm.search_filter.instance')] readonly FilterInterface $searchFilter, ?array $properties = null, private readonly ?string $key = null) { - $searchFilter->properties = $properties; + $searchFilter->setProperties($properties); } // This function is only used to hook in documentation generators (supported by Swagger and Hydra) diff --git a/tests/Fixtures/TestBundle/Filter/SearchTextAndDateFilter.php b/tests/Fixtures/TestBundle/Filter/SearchTextAndDateFilter.php index 6356784969..9b9ccbd273 100644 --- a/tests/Fixtures/TestBundle/Filter/SearchTextAndDateFilter.php +++ b/tests/Fixtures/TestBundle/Filter/SearchTextAndDateFilter.php @@ -21,10 +21,10 @@ final class SearchTextAndDateFilter implements FilterInterface { - public function __construct(#[Autowire('@api_platform.doctrine.orm.search_filter.instance')] readonly FilterInterface $searchFilter, #[Autowire('@api_platform.doctrine.orm.date_filter.instance')] readonly FilterInterface $dateFilter, ?array $properties = null, array $dateFilterProperties = [], array $searchFilterProperties = []) + public function __construct(#[Autowire('@api_platform.doctrine.orm.search_filter.instance')] readonly FilterInterface $searchFilter, #[Autowire('@api_platform.doctrine.orm.date_filter.instance')] readonly FilterInterface $dateFilter, protected ?array $properties = null, array $dateFilterProperties = [], array $searchFilterProperties = []) { - $searchFilter->properties = $searchFilterProperties; - $dateFilter->properties = $dateFilterProperties; + $searchFilter->setProperties($searchFilterProperties); + $dateFilter->setProperties($dateFilterProperties); } // This function is only used to hook in documentation generators (supported by Swagger and Hydra)