Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Api Platform - domyślna wartość w ApiFilter
Forum PHP.pl > Forum > PHP > Frameworki
czachor
Mam taką encję:

  1. /**
  2.  * @ApiFilter(BooleanFilter::class, properties={"isActive"})
  3.  * @ORM\Entity(repositoryClass=FooRepository::class)
  4.  */
  5. class Foo
  6. {
  7. /**
  8.   * @ORM\Column(type="boolean")
  9.   */
  10. private bool $isActive = true;
  11.  
  12. // ciach reszty, nie dotyczy problemu
  13. }


Korzystam z paczki ApiPlatform, w której wygenerowałem sobie całe API. Mam endpoint `/api/foo`, w którym wypluwam listę elementów. Powyższe rozwiązanie pozwala na wybór w requeście, czy $isActive ma być true / false. Chciałbym mieć wymuszone filtrowanie, żeby API zwróciło tylko elementy, które mają wartość `$isActive` równą `true` - bez możliwości wyboru. Jak to osiągnąć?
ohm
O ile mnie pamiec nie myli, to przez dataprovider modyfikujesz zapytanie.
czachor
Dzięki, faktycznie chodzi o DataProvider.
Manual: https://api-platform.com/docs/core/data-providers/

I rozwiązanie (oczywiście metodę 'findByFieldBar()' trzeba juz sobie samemu ogarnąć w Repository:
  1. <?php
  2.  
  3. namespace App\DataProvider;
  4.  
  5. use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
  6. use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
  7. use App\Entity\Foo;
  8. use App\Repository\FooRepository;
  9.  
  10. final class FooCollectionDataProvider implements CollectionDataProviderInterface, RestrictedDataProviderInterface
  11. {
  12. /**
  13.   * @var FooRepository
  14.   */
  15. private FooRepository $fooRepository;
  16.  
  17. public function __construct(FooRepository $fooRepository)
  18. {
  19. $this->fooRepository = $fooRepository;
  20. }
  21.  
  22. public function supports(string $resourceClass, string $operationName = null, array $context = []): bool
  23. {
  24. return Foo::class === $resourceClass;
  25. }
  26.  
  27. public function getCollection(string $resourceClass, string $operationName = null)
  28. {
  29.  
  30. return $this->fooRepository->findByFieldBar();
  31. }
  32. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.