Skip to content

Commit 365bfd8

Browse files
committed
test(symfony): migrate #[ApiFilter] fixtures via upgrade-filter
Dogfood the codemod: 10 resources migrated to QueryParameter, 6 skipped (name-conversion + a service/#[ApiFilter] key overlap) and kept as-is.
1 parent cf37b7d commit 365bfd8

10 files changed

Lines changed: 58 additions & 102 deletions

File tree

tests/Fixtures/TestBundle/ApiResource/JsonLd/NonResourceContainer.php

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,21 @@
1313

1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\ApiResource\JsonLd;
1515

16-
use ApiPlatform\Metadata\ApiFilter;
1716
use ApiPlatform\Metadata\ApiProperty;
1817
use ApiPlatform\Metadata\ApiResource;
1918
use ApiPlatform\Metadata\Get;
2019
use ApiPlatform\Metadata\Operation;
20+
use ApiPlatform\Metadata\QueryParameter;
2121
use ApiPlatform\Serializer\Filter\PropertyFilter;
2222
use Symfony\Component\Serializer\Attribute\Groups;
2323

24-
#[ApiResource(
25-
shortName: 'JsonLdNonResourceContainer',
26-
normalizationContext: ['groups' => ['jsonld_non_resource']],
27-
operations: [
28-
new Get(
29-
uriTemplate: '/jsonld_non_resource_containers/{id}',
30-
uriVariables: ['id'],
31-
provider: [self::class, 'provide'],
32-
),
33-
],
34-
)]
35-
#[ApiFilter(PropertyFilter::class)]
24+
#[ApiResource(shortName: 'JsonLdNonResourceContainer', normalizationContext: ['groups' => ['jsonld_non_resource']], operations: [
25+
new Get(
26+
uriTemplate: '/jsonld_non_resource_containers/{id}',
27+
uriVariables: ['id'],
28+
provider: [self::class, 'provide'],
29+
),
30+
], parameters: ['properties' => new QueryParameter(filter: new PropertyFilter())])]
3631
class NonResourceContainer
3732
{
3833
#[ApiProperty(identifier: true)]

tests/Fixtures/TestBundle/ApiResource/PropertyFilter/SparseFieldsetParent.php

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,20 @@
1313

1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\ApiResource\PropertyFilter;
1515

16-
use ApiPlatform\Metadata\ApiFilter;
1716
use ApiPlatform\Metadata\ApiProperty;
1817
use ApiPlatform\Metadata\ApiResource;
1918
use ApiPlatform\Metadata\Get;
2019
use ApiPlatform\Metadata\Operation;
20+
use ApiPlatform\Metadata\QueryParameter;
2121
use ApiPlatform\Serializer\Filter\PropertyFilter;
2222

23-
#[ApiResource(
24-
operations: [
25-
new Get(
26-
uriTemplate: '/sparse_fieldset_parents/{id}',
27-
uriVariables: ['id'],
28-
provider: [self::class, 'provide'],
29-
),
30-
],
31-
)]
32-
#[ApiFilter(PropertyFilter::class)]
23+
#[ApiResource(operations: [
24+
new Get(
25+
uriTemplate: '/sparse_fieldset_parents/{id}',
26+
uriVariables: ['id'],
27+
provider: [self::class, 'provide'],
28+
),
29+
], parameters: ['properties' => new QueryParameter(filter: new PropertyFilter())])]
3330
final class SparseFieldsetParent
3431
{
3532
public function __construct(

tests/Fixtures/TestBundle/Entity/DummyCar.php

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,28 @@
1313

1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\Entity;
1515

16-
use ApiPlatform\Doctrine\Orm\Filter\BooleanFilter;
1716
use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
18-
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
19-
use ApiPlatform\Metadata\ApiFilter;
17+
use ApiPlatform\Doctrine\Orm\Filter\ExactFilter;
18+
use ApiPlatform\Doctrine\Orm\Filter\IriFilter;
19+
use ApiPlatform\Doctrine\Orm\Filter\PartialSearchFilter;
2020
use ApiPlatform\Metadata\ApiResource;
2121
use ApiPlatform\Metadata\Delete;
2222
use ApiPlatform\Metadata\Get;
2323
use ApiPlatform\Metadata\GetCollection;
2424
use ApiPlatform\Metadata\Post;
2525
use ApiPlatform\Metadata\Put;
26+
use ApiPlatform\Metadata\QueryParameter;
2627
use ApiPlatform\OpenApi\Model\Operation as OpenApiOperation;
2728
use ApiPlatform\Serializer\Filter\GroupFilter;
2829
use ApiPlatform\Serializer\Filter\PropertyFilter;
2930
use Doctrine\Common\Collections\ArrayCollection;
3031
use Doctrine\Common\Collections\Collection;
3132
use Doctrine\ORM\Mapping as ORM;
3233
use Symfony\Component\Serializer\Attribute as Serializer;
34+
use Symfony\Component\TypeInfo\Type\BuiltinType;
35+
use Symfony\Component\TypeInfo\TypeIdentifier;
3336

34-
#[ApiFilter(DateFilter::class, strategy: DateFilter::EXCLUDE_NULL)]
35-
#[ApiFilter(BooleanFilter::class)]
36-
#[ApiFilter(PropertyFilter::class, arguments: ['parameterName' => 'foobar'])]
37-
#[ApiFilter(GroupFilter::class, arguments: ['parameterName' => 'foobargroups'])]
38-
#[ApiFilter(GroupFilter::class, arguments: ['parameterName' => 'foobargroups_override'], id: 'override')]
39-
#[ApiResource(operations: [new Get(openapi: new OpenApiOperation(tags: [])), new Put(), new Delete(), new Post(), new GetCollection()], sunset: '2050-01-01', normalizationContext: ['groups' => ['colors']])]
37+
#[ApiResource(operations: [new Get(openapi: new OpenApiOperation(tags: [])), new Put(), new Delete(), new Post(), new GetCollection()], sunset: '2050-01-01', normalizationContext: ['groups' => ['colors']], parameters: ['availableAt' => new QueryParameter(filter: new DateFilter(), filterContext: DateFilter::EXCLUDE_NULL), 'canSell' => new QueryParameter(filter: new ExactFilter(), nativeType: new BuiltinType(TypeIdentifier::BOOL), castToNativeType: true), 'foobar' => new QueryParameter(filter: new PropertyFilter(parameterName: 'foobar')), 'foobargroups' => new QueryParameter(filter: new GroupFilter(parameterName: 'foobargroups')), 'foobargroups_override' => new QueryParameter(filter: new GroupFilter(parameterName: 'foobargroups_override')), 'colors.prop' => new QueryParameter(filter: new PartialSearchFilter(), property: 'colors.prop'), 'colors' => new QueryParameter(filter: new IriFilter()), 'secondColors' => new QueryParameter(filter: new IriFilter()), 'thirdColors' => new QueryParameter(filter: new IriFilter()), 'uuid' => new QueryParameter(filter: new IriFilter()), 'name' => new QueryParameter(filter: new PartialSearchFilter(caseSensitive: true)), 'brand' => new QueryParameter(filter: new ExactFilter())])]
4038
#[ORM\Entity]
4139
class DummyCar
4240
{
@@ -46,34 +44,28 @@ class DummyCar
4644
#[ORM\Id]
4745
#[ORM\OneToOne(targetEntity: DummyCarIdentifier::class, cascade: ['persist'])]
4846
private DummyCarIdentifier $id;
49-
#[ApiFilter(SearchFilter::class, properties: ['colors.prop' => 'ipartial', 'colors' => 'exact'])]
5047
#[ORM\OneToMany(targetEntity: DummyCarColor::class, mappedBy: 'car')]
5148
#[Serializer\Groups(['colors'])]
5249
private Collection|iterable $colors;
53-
#[ApiFilter(SearchFilter::class, strategy: 'exact')]
5450
#[ORM\OneToMany(targetEntity: DummyCarColor::class, mappedBy: 'car')]
5551
#[Serializer\Groups(['colors'])]
5652
private Collection|iterable|null $secondColors = null;
57-
#[ApiFilter(SearchFilter::class, strategy: 'exact')]
5853
#[ORM\OneToMany(targetEntity: DummyCarColor::class, mappedBy: 'car')]
5954
#[Serializer\Groups(['colors'])]
6055
private Collection|iterable|null $thirdColors = null;
61-
#[ApiFilter(SearchFilter::class, strategy: 'exact')]
6256
#[ORM\ManyToMany(targetEntity: UuidIdentifierDummy::class, indexBy: 'uuid')]
6357
#[ORM\JoinColumn(name: 'car_id', referencedColumnName: 'id_id')]
6458
#[ORM\InverseJoinColumn(name: 'uuid_uuid', referencedColumnName: 'uuid')]
6559
#[ORM\JoinTable(name: 'uuid_cars')]
6660
#[Serializer\Groups(['colors'])]
6761
private Collection|iterable|null $uuid = null;
6862

69-
#[ApiFilter(SearchFilter::class, strategy: 'partial')]
7063
#[ORM\Column(type: 'string')]
7164
private string $name;
7265
#[ORM\Column(type: 'boolean')]
7366
private bool $canSell;
7467
#[ORM\Column(type: 'datetime')]
7568
private \DateTime $availableAt;
76-
#[ApiFilter(SearchFilter::class, strategy: SearchFilter::STRATEGY_IEXACT)]
7769
#[Serializer\Groups(['colors'])]
7870
#[Serializer\SerializedName('carBrand')]
7971
#[ORM\Column]

tests/Fixtures/TestBundle/Entity/DummyCarColor.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313

1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\Entity;
1515

16-
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
17-
use ApiPlatform\Metadata\ApiFilter;
16+
use ApiPlatform\Doctrine\Orm\Filter\ExactFilter;
1817
use ApiPlatform\Metadata\ApiResource;
18+
use ApiPlatform\Metadata\QueryParameter;
1919
use Doctrine\ORM\Mapping as ORM;
2020
use Symfony\Component\Serializer\Attribute\Groups;
2121
use Symfony\Component\Validator\Constraints as Assert;
2222

23-
#[ApiResource]
23+
#[ApiResource(parameters: ['prop' => new QueryParameter(filter: new ExactFilter())])]
2424
#[ORM\Entity]
2525
class DummyCarColor
2626
{
@@ -35,7 +35,6 @@ class DummyCarColor
3535
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE', referencedColumnName: 'id_id')]
3636
#[Assert\NotBlank]
3737
private DummyCar $car;
38-
#[ApiFilter(SearchFilter::class)]
3938
#[ORM\Column(nullable: false)]
4039
#[Assert\NotBlank]
4140
#[Groups(['colors'])]

tests/Fixtures/TestBundle/Entity/DummyExceptionToStatus.php

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,22 @@
1313

1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\Entity;
1515

16-
use ApiPlatform\Metadata\ApiFilter;
1716
use ApiPlatform\Metadata\ApiResource;
1817
use ApiPlatform\Metadata\Get;
1918
use ApiPlatform\Metadata\GetCollection;
2019
use ApiPlatform\Metadata\Put;
20+
use ApiPlatform\Metadata\QueryParameter;
2121
use ApiPlatform\Tests\Fixtures\TestBundle\Exception\NotFoundException;
2222
use ApiPlatform\Tests\Fixtures\TestBundle\Filter\RequiredFilter;
2323
use ApiPlatform\Tests\Fixtures\TestBundle\State\DummyExceptionToStatusProvider;
2424
use Doctrine\ORM\Mapping as ORM;
2525
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
2626

27-
#[ApiResource(
28-
exceptionToStatus: [NotFoundHttpException::class => 400],
29-
provider: DummyExceptionToStatusProvider::class,
30-
operations: [
31-
new Get(uriTemplate: '/dummy_exception_to_statuses/{id}', exceptionToStatus: [NotFoundException::class => 404]),
32-
new Put(uriTemplate: '/dummy_exception_to_statuses/{id}'),
33-
new GetCollection(uriTemplate: '/dummy_exception_to_statuses'),
34-
],
35-
graphQlOperations: []
36-
)]
37-
#[ApiFilter(RequiredFilter::class)]
27+
#[ApiResource(exceptionToStatus: [NotFoundHttpException::class => 400], provider: DummyExceptionToStatusProvider::class, operations: [
28+
new Get(uriTemplate: '/dummy_exception_to_statuses/{id}', exceptionToStatus: [NotFoundException::class => 404]),
29+
new Put(uriTemplate: '/dummy_exception_to_statuses/{id}'),
30+
new GetCollection(uriTemplate: '/dummy_exception_to_statuses'),
31+
], graphQlOperations: [], parameters: ['required' => new QueryParameter(filter: new RequiredFilter()), 'not-required' => new QueryParameter(filter: new RequiredFilter())])]
3832
#[ORM\Entity]
3933
class DummyExceptionToStatus
4034
{

tests/Fixtures/TestBundle/Entity/DummyPhp8.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,20 @@
1313

1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\Entity;
1515

16-
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
17-
use ApiPlatform\Metadata\ApiFilter;
16+
use ApiPlatform\Doctrine\Orm\Filter\ExactFilter;
1817
use ApiPlatform\Metadata\ApiProperty;
1918
use ApiPlatform\Metadata\ApiResource;
19+
use ApiPlatform\Metadata\QueryParameter;
2020
use Doctrine\ORM\Mapping as ORM;
2121

22-
#[ApiResource(description: 'Hey PHP 8')]
22+
#[ApiResource(description: 'Hey PHP 8', parameters: ['filtered' => new QueryParameter(filter: new ExactFilter())])]
2323
#[ORM\Entity]
2424
class DummyPhp8
2525
{
2626
#[ApiProperty(identifier: true, description: 'the identifier')]
2727
#[ORM\Id]
2828
#[ORM\Column(type: 'integer')]
2929
public $id;
30-
#[ApiFilter(SearchFilter::class)]
3130
#[ORM\Column]
3231
public $filtered;
3332

tests/Fixtures/TestBundle/Entity/Issue5735/Issue5735User.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,21 @@
1313

1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\Entity\Issue5735;
1515

16-
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
17-
use ApiPlatform\Metadata\ApiFilter;
16+
use ApiPlatform\Doctrine\Orm\Filter\IriFilter;
1817
use ApiPlatform\Metadata\ApiProperty;
1918
use ApiPlatform\Metadata\ApiResource;
2019
use ApiPlatform\Metadata\Get;
2120
use ApiPlatform\Metadata\GetCollection;
21+
use ApiPlatform\Metadata\QueryParameter;
2222
use Doctrine\Common\Collections\ArrayCollection;
2323
use Doctrine\Common\Collections\Collection;
2424
use Doctrine\ORM\Mapping as ORM;
2525
use Symfony\Component\Uid\Uuid;
2626

27-
#[ApiResource(
28-
operations: [
29-
new Get(),
30-
new GetCollection(),
31-
],
32-
routePrefix: '/issue5735'
33-
)]
34-
#[ApiFilter(SearchFilter::class, properties: ['groups' => 'exact'])]
27+
#[ApiResource(operations: [
28+
new Get(),
29+
new GetCollection(),
30+
], routePrefix: '/issue5735', parameters: ['groups' => new QueryParameter(filter: new IriFilter())])]
3531
#[ORM\Entity]
3632
#[ORM\Table(name: 'issue5735_user')]
3733
class Issue5735User

tests/Fixtures/TestBundle/Entity/Issue8085/DatedCursorDummy.php

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,18 @@
1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\Entity\Issue8085;
1515

1616
use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
17-
use ApiPlatform\Metadata\ApiFilter;
1817
use ApiPlatform\Metadata\ApiResource;
1918
use ApiPlatform\Metadata\GetCollection;
19+
use ApiPlatform\Metadata\QueryParameter;
2020
use Doctrine\ORM\Mapping as ORM;
2121

22-
#[ApiResource(
23-
operations: [
24-
new GetCollection(
25-
paginationItemsPerPage: 3,
26-
paginationPartial: true,
27-
paginationViaCursor: [['field' => 'createdAt', 'direction' => 'DESC']],
28-
),
29-
],
30-
graphQlOperations: [],
31-
)]
32-
#[ApiFilter(DateFilter::class, properties: ['createdAt'])]
22+
#[ApiResource(operations: [
23+
new GetCollection(
24+
paginationItemsPerPage: 3,
25+
paginationPartial: true,
26+
paginationViaCursor: [['field' => 'createdAt', 'direction' => 'DESC']],
27+
),
28+
], graphQlOperations: [], parameters: ['createdAt' => new QueryParameter(filter: new DateFilter())])]
3329
#[ORM\Entity]
3430
#[ORM\Table(name: 'issue_8085_dated_cursor_dummy')]
3531
class DatedCursorDummy

tests/Fixtures/TestBundle/Entity/RelatedDummy.php

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,15 @@
1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\Entity;
1515

1616
use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
17-
use ApiPlatform\Doctrine\Orm\Filter\ExistsFilter;
18-
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
19-
use ApiPlatform\Metadata\ApiFilter;
17+
use ApiPlatform\Doctrine\Orm\Filter\ExactFilter;
2018
use ApiPlatform\Metadata\ApiProperty;
2119
use ApiPlatform\Metadata\ApiResource;
2220
use ApiPlatform\Metadata\Get;
2321
use ApiPlatform\Metadata\GetCollection;
2422
use ApiPlatform\Metadata\GraphQl\Mutation;
2523
use ApiPlatform\Metadata\GraphQl\Query;
2624
use ApiPlatform\Metadata\Link;
25+
use ApiPlatform\Metadata\QueryParameter;
2726
use Doctrine\Common\Collections\ArrayCollection;
2827
use Doctrine\Common\Collections\Collection;
2928
use Doctrine\ORM\Mapping as ORM;
@@ -35,23 +34,17 @@
3534
*
3635
* @author Kévin Dunglas <dunglas@gmail.com>
3736
*/
38-
#[ApiResource(
39-
graphQlOperations: [
40-
new Query(name: 'item_query'),
41-
new Mutation(name: 'update', normalizationContext: ['groups' => ['chicago', 'fakemanytomany']], denormalizationContext: ['groups' => ['friends']]),
42-
],
43-
types: ['https://schema.org/Product'],
44-
normalizationContext: ['groups' => ['friends']],
45-
filters: ['related_dummy.friends', 'related_dummy.complex_sub_query']
46-
)]
37+
#[ApiResource(graphQlOperations: [
38+
new Query(name: 'item_query'),
39+
new Mutation(name: 'update', normalizationContext: ['groups' => ['chicago', 'fakemanytomany']], denormalizationContext: ['groups' => ['friends']]),
40+
], types: ['https://schema.org/Product'], normalizationContext: ['groups' => ['friends']], filters: ['related_dummy.friends', 'related_dummy.complex_sub_query'], parameters: ['id' => new QueryParameter(filter: new ExactFilter()), 'symfony' => new QueryParameter(filter: new ExactFilter()), 'dummyDate' => new QueryParameter(filter: new DateFilter())])]
4741
#[ApiResource(uriTemplate: '/dummies/{id}/related_dummies{._format}', uriVariables: ['id' => new Link(fromClass: Dummy::class, identifiers: ['id'], fromProperty: 'relatedDummies')], status: 200, types: ['https://schema.org/Product'], filters: ['related_dummy.friends', 'related_dummy.complex_sub_query'], normalizationContext: ['groups' => ['friends']], operations: [new GetCollection()])]
4842
#[ApiResource(uriTemplate: '/dummies/{id}/related_dummies/{relatedDummies}{._format}', uriVariables: ['id' => new Link(fromClass: Dummy::class, identifiers: ['id'], fromProperty: 'relatedDummies'), 'relatedDummies' => new Link(fromClass: self::class, identifiers: ['id'])], status: 200, types: ['https://schema.org/Product'], filters: ['related_dummy.friends', 'related_dummy.complex_sub_query'], normalizationContext: ['groups' => ['friends']], operations: [new Get()])]
4943
#[ApiResource(uriTemplate: '/related_dummies/{id}/id{._format}', uriVariables: ['id' => new Link(fromClass: self::class, identifiers: ['id'])], status: 200, types: ['https://schema.org/Product'], filters: ['related_dummy.friends', 'related_dummy.complex_sub_query'], normalizationContext: ['groups' => ['friends']], operations: [new Get()])]
5044
#[ApiResource(uriTemplate: '/related_owned_dummies/{id}/owning_dummy/related_dummies{._format}', uriVariables: ['id' => new Link(fromClass: RelatedOwnedDummy::class, identifiers: ['id'], fromProperty: 'owningDummy'), 'owningDummy' => new Link(fromClass: Dummy::class, identifiers: [], expandedValue: 'owning_dummy', fromProperty: 'relatedDummies')], status: 200, types: ['https://schema.org/Product'], filters: ['related_dummy.friends', 'related_dummy.complex_sub_query'], normalizationContext: ['groups' => ['friends']], operations: [new GetCollection()])]
5145
#[ApiResource(uriTemplate: '/related_owned_dummies/{id}/owning_dummy/related_dummies/{relatedDummies}{._format}', uriVariables: ['id' => new Link(fromClass: RelatedOwnedDummy::class, identifiers: ['id'], fromProperty: 'owningDummy'), 'owningDummy' => new Link(fromClass: Dummy::class, identifiers: [], expandedValue: 'owning_dummy', fromProperty: 'relatedDummies'), 'relatedDummies' => new Link(fromClass: self::class, identifiers: ['id'])], status: 200, types: ['https://schema.org/Product'], filters: ['related_dummy.friends', 'related_dummy.complex_sub_query'], normalizationContext: ['groups' => ['friends']], operations: [new Get()])]
5246
#[ApiResource(uriTemplate: '/related_owning_dummies/{id}/owned_dummy/related_dummies{._format}', uriVariables: ['id' => new Link(fromClass: RelatedOwningDummy::class, identifiers: ['id'], fromProperty: 'ownedDummy'), 'ownedDummy' => new Link(fromClass: Dummy::class, identifiers: [], expandedValue: 'owned_dummy', fromProperty: 'relatedDummies')], status: 200, types: ['https://schema.org/Product'], filters: ['related_dummy.friends', 'related_dummy.complex_sub_query'], normalizationContext: ['groups' => ['friends']], operations: [new GetCollection()])]
5347
#[ApiResource(uriTemplate: '/related_owning_dummies/{id}/owned_dummy/related_dummies/{relatedDummies}{._format}', uriVariables: ['id' => new Link(fromClass: RelatedOwningDummy::class, identifiers: ['id'], fromProperty: 'ownedDummy'), 'ownedDummy' => new Link(fromClass: Dummy::class, identifiers: [], expandedValue: 'owned_dummy', fromProperty: 'relatedDummies'), 'relatedDummies' => new Link(fromClass: self::class, identifiers: ['id'])], status: 200, types: ['https://schema.org/Product'], filters: ['related_dummy.friends', 'related_dummy.complex_sub_query'], normalizationContext: ['groups' => ['friends']], operations: [new Get()])]
54-
#[ApiFilter(filterClass: SearchFilter::class, properties: ['id'])]
5548
#[ORM\Entity]
5649
class RelatedDummy extends ParentDummy implements \Stringable
5750
{
@@ -73,8 +66,6 @@ class RelatedDummy extends ParentDummy implements \Stringable
7366
#[ApiProperty(deprecationReason: 'This property is deprecated for upgrade test')]
7467
#[ORM\Column]
7568
#[Groups(['barcelona', 'chicago', 'friends'])]
76-
#[ApiFilter(filterClass: SearchFilter::class)]
77-
#[ApiFilter(filterClass: ExistsFilter::class)]
7869
protected $symfony = 'symfony';
7970

8071
/**
@@ -83,7 +74,6 @@ class RelatedDummy extends ParentDummy implements \Stringable
8374
#[ORM\Column(type: 'datetime', nullable: true)]
8475
#[Assert\DateTime]
8576
#[Groups(['friends'])]
86-
#[ApiFilter(filterClass: DateFilter::class)]
8777
public $dummyDate;
8878

8979
#[ORM\ManyToOne(targetEntity: ThirdLevel::class, cascade: ['persist'], inversedBy: 'relatedDummies')]

tests/Fixtures/TestBundle/Entity/SoMany.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,13 @@
1313

1414
namespace ApiPlatform\Tests\Fixtures\TestBundle\Entity;
1515

16-
use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
1716
use ApiPlatform\Doctrine\Orm\Filter\RangeFilter;
18-
use ApiPlatform\Metadata\ApiFilter;
17+
use ApiPlatform\Doctrine\Orm\Filter\SortFilter;
1918
use ApiPlatform\Metadata\ApiResource;
19+
use ApiPlatform\Metadata\QueryParameter;
2020
use Doctrine\ORM\Mapping as ORM;
2121

22-
#[ApiFilter(RangeFilter::class, properties: ['id'])]
23-
#[ApiFilter(OrderFilter::class, properties: ['id' => 'DESC'])]
24-
#[ApiResource(paginationPartial: true, paginationViaCursor: [['field' => 'id', 'direction' => 'DESC']])]
22+
#[ApiResource(paginationPartial: true, paginationViaCursor: [['field' => 'id', 'direction' => 'DESC']], parameters: ['id' => new QueryParameter(filter: new RangeFilter()), 'order[:property]' => new QueryParameter(filter: new SortFilter())])]
2523
#[ORM\Entity]
2624
class SoMany
2725
{

0 commit comments

Comments
 (0)