2
2
3
3
namespace App \DataProvider ;
4
4
5
- use ApiPlatform \Core \Bridge \Doctrine \Orm \Extension \PaginationExtension ;
5
+ use ApiPlatform \Core \Bridge \Doctrine \Orm \Extension \FilterExtension ;
6
6
use ApiPlatform \Core \Bridge \Doctrine \Orm \Extension \QueryResultCollectionExtensionInterface ;
7
7
use ApiPlatform \Core \Bridge \Doctrine \Orm \Util \QueryNameGenerator ;
8
8
use ApiPlatform \Core \DataProvider \ContextAwareCollectionDataProviderInterface ;
13
13
final class CarCollectionDataProvider implements ContextAwareCollectionDataProviderInterface, RestrictedDataProviderInterface
14
14
{
15
15
private $ managerRegistry ;
16
- private $ paginationExtension ;
16
+ private $ collectionExtensions ;
17
17
18
- public function __construct (ManagerRegistry $ managerRegistry , PaginationExtension $ paginationExtension )
18
+ public function __construct (ManagerRegistry $ managerRegistry ,
19
+ $ collectionExtensions
20
+ )
19
21
{
20
22
$ this ->managerRegistry = $ managerRegistry ;
21
- $ this ->paginationExtension = $ paginationExtension ;
23
+ $ this ->collectionExtensions = $ collectionExtensions ;
22
24
}
23
25
24
26
public function supports (string $ resourceClass , string $ operationName = null , array $ context = []): bool
@@ -28,9 +30,11 @@ public function supports(string $resourceClass, string $operationName = null, ar
28
30
29
31
public function getCollection (string $ resourceClass , string $ operationName = null , array $ context = []): iterable
30
32
{
33
+ $ queryNameGenerator = new QueryNameGenerator ();
31
34
$ queryBuilder = $ this ->managerRegistry
32
35
->getManagerForClass ($ resourceClass )
33
- ->getRepository ($ resourceClass )->createQueryBuilder ('c ' );
36
+ ->getRepository ($ resourceClass )
37
+ ->createQueryBuilder ('c ' );
34
38
35
39
if (isset ($ context ['filters ' ]['color ' ])) {
36
40
$ queryBuilder
@@ -39,14 +43,16 @@ public function getCollection(string $resourceClass, string $operationName = nul
39
43
;
40
44
}
41
45
42
- $ this ->paginationExtension ->applyToCollection ($ queryBuilder , new QueryNameGenerator (), $ resourceClass , $ operationName , $ context );
43
-
44
- if ($ this ->paginationExtension instanceof QueryResultCollectionExtensionInterface &&
45
- $ this ->paginationExtension ->supportsResult ($ resourceClass , $ operationName , $ context )) {
46
- return $ this ->paginationExtension ->getResult ($ queryBuilder , $ resourceClass , $ operationName , $ context );
46
+ /** @var FilterExtension $extension */
47
+ foreach ($ this ->collectionExtensions as $ extension ) {
48
+ $ extension ->applyToCollection ($ queryBuilder , $ queryNameGenerator , $ resourceClass , $ operationName , $ context );
49
+ if ($ extension instanceof QueryResultCollectionExtensionInterface &&
50
+ $ extension ->supportsResult ($ resourceClass , $ operationName , $ context )
51
+ ) {
52
+ return $ extension ->getResult ($ queryBuilder , $ resourceClass , $ operationName , $ context );
53
+ }
47
54
}
48
55
49
56
return $ queryBuilder ->getQuery ()->getResult ();
50
-
51
57
}
52
58
}
0 commit comments