Skip to content

Commit b8397ae

Browse files
committed
Not use AbstractFilter
1 parent 100a022 commit b8397ae

File tree

3 files changed

+31
-40
lines changed

3 files changed

+31
-40
lines changed

src/Doctrine/Orm/Filter/AbstractUuidFilter.php

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,16 @@
1313

1414
namespace ApiPlatform\Doctrine\Orm\Filter;
1515

16+
use ApiPlatform\Doctrine\Common\Filter\LoggerAwareInterface;
17+
use ApiPlatform\Doctrine\Common\Filter\LoggerAwareTrait;
18+
use ApiPlatform\Doctrine\Common\Filter\ManagerRegistryAwareInterface;
19+
use ApiPlatform\Doctrine\Common\Filter\ManagerRegistryAwareTrait;
20+
use ApiPlatform\Doctrine\Common\PropertyHelperTrait;
21+
use ApiPlatform\Doctrine\Orm\PropertyHelperTrait as OrmPropertyHelperTrait;
1622
use ApiPlatform\Doctrine\Orm\Util\QueryBuilderHelper;
1723
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
1824
use ApiPlatform\Metadata\BackwardCompatibleFilterDescriptionTrait;
19-
use ApiPlatform\Metadata\Exception\InvalidArgumentException;
25+
use ApiPlatform\Metadata\JsonSchemaFilterInterface;
2026
use ApiPlatform\Metadata\OpenApiParameterFilterInterface;
2127
use ApiPlatform\Metadata\Operation;
2228
use ApiPlatform\Metadata\Parameter;
@@ -32,33 +38,35 @@
3238
/**
3339
* @internal
3440
*/
35-
class AbstractUuidFilter extends AbstractFilter implements OpenApiParameterFilterInterface
41+
class AbstractUuidFilter implements FilterInterface, ManagerRegistryAwareInterface, JsonSchemaFilterInterface, OpenApiParameterFilterInterface, LoggerAwareInterface
3642
{
3743
use BackwardCompatibleFilterDescriptionTrait;
44+
use LoggerAwareTrait;
45+
use ManagerRegistryAwareTrait;
46+
use OrmPropertyHelperTrait;
47+
use PropertyHelperTrait;
3848

3949
private const UUID_SCHEMA = [
4050
'type' => 'string',
4151
'format' => 'uuid',
4252
];
4353

44-
protected function filterProperty(string $property, mixed $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void
54+
public function apply(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void
4555
{
46-
if (
47-
null === $value
48-
|| !$this->isPropertyEnabled($property, $resourceClass)
49-
|| !$this->isPropertyMapped($property, $resourceClass, true)
50-
) {
56+
$parameter = $context['parameter'] ?? null;
57+
if (!$parameter) {
5158
return;
5259
}
5360

61+
$this->filterProperty($parameter->getProperty(), $parameter->getValue(), $queryBuilder, $queryNameGenerator, $resourceClass, $operation, $context);
62+
}
63+
64+
protected function filterProperty(string $property, mixed $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, ?Operation $operation = null, array $context = []): void
65+
{
5466
$alias = $queryBuilder->getRootAliases()[0];
5567
$field = $property;
5668

57-
$values = $this->normalizeValues((array) $value, $property);
58-
if (null === $values) {
59-
return;
60-
}
61-
69+
$values = (array) $value;
6270
$associations = [];
6371
if ($this->isPropertyNested($property, $resourceClass)) {
6472
[$alias, $field, $associations] = $this->addJoinsForNestedProperty($property, $alias, $queryBuilder, $queryNameGenerator, $resourceClass, Join::INNER_JOIN);
@@ -185,25 +193,8 @@ public function getOpenApiParameters(Parameter $parameter): array
185193
];
186194
}
187195

188-
/**
189-
* Normalize the values array.
190-
*/
191-
protected function normalizeValues(array $values, string $property): ?array
196+
public function getSchema(Parameter $parameter): array
192197
{
193-
foreach ($values as $key => $value) {
194-
if (!\is_string($value)) {
195-
unset($values[$key]);
196-
}
197-
}
198-
199-
if (0 === \count($values)) {
200-
$this->getLogger()->notice('Invalid filter ignored', [
201-
'exception' => new InvalidArgumentException(\sprintf('At least one value is required, multiple values should be in "%1$s[]=019b3c90-e265-72e5-a594-17b446a4067f&%1$s[]=019b3c9b-bce6-76dc-a066-9a44f4ec253f" format', $property)),
202-
]);
203-
204-
return null;
205-
}
206-
207-
return array_values($values);
198+
return self::UUID_SCHEMA;
208199
}
209200
}

src/Doctrine/Orm/Filter/UlidFilter.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,9 @@ public function getOpenApiParameters(Parameter $parameter): array
5050
),
5151
];
5252
}
53+
54+
public function getSchema(Parameter $parameter): array
55+
{
56+
return self::ULID_SCHEMA;
57+
}
5358
}

src/Symfony/Bundle/Resources/config/doctrine_orm.php

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -222,18 +222,13 @@
222222
->parent('api_platform.doctrine.orm.search_filter')
223223
->args([[]]);
224224

225-
$services->set('api_platform.doctrine.orm.uuid_filter', 'ApiPlatform\Doctrine\Orm\Filter\UuidFilter')
226-
->arg(0, service('doctrine'))
227-
->arg(3, service('logger')->ignoreOnInvalid())
228-
->arg('$nameConverter', service('api_platform.name_converter')->ignoreOnInvalid());
225+
$services->set('api_platform.doctrine.orm.uuid_filter', 'ApiPlatform\Doctrine\Orm\Filter\UuidFilter');
229226
$services->alias('ApiPlatform\Doctrine\Orm\Filter\UuidFilter', 'api_platform.doctrine.orm.uuid_filter');
230227

231-
$services->set('api_platform.doctrine.orm.ulid_filter', 'ApiPlatform\Doctrine\Orm\Filter\UlidFilter')
232-
->parent('api_platform.doctrine.orm.uuid_filter');
228+
$services->set('api_platform.doctrine.orm.ulid_filter', 'ApiPlatform\Doctrine\Orm\Filter\UlidFilter');
233229
$services->alias('ApiPlatform\Doctrine\Orm\Filter\UlidFilter', 'api_platform.doctrine.orm.ulid_filter');
234230

235-
$services->set('api_platform.doctrine.orm.uuid_binary_filter', 'ApiPlatform\Doctrine\Orm\Filter\UuidBinaryFilter')
236-
->parent('api_platform.doctrine.orm.uuid_filter');
231+
$services->set('api_platform.doctrine.orm.uuid_binary_filter', 'ApiPlatform\Doctrine\Orm\Filter\UuidBinaryFilter');
237232
$services->alias('ApiPlatform\Doctrine\Orm\Filter\UuidBinaryFilter', 'api_platform.doctrine.orm.uuid_binary_filter');
238233

239234
$services->set('api_platform.doctrine.orm.metadata.resource.metadata_collection_factory', 'ApiPlatform\Doctrine\Orm\Metadata\Resource\DoctrineOrmResourceCollectionMetadataFactory')

0 commit comments

Comments
 (0)