PHP code example of monterhealth / api-filter-bundle
1. Go to this page and download the library: Download monterhealth/api-filter-bundle library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
monterhealth / api-filter-bundle example snippets
// config/bundles.php
return [
// ...
MonterHealth\ApiFilterBundle\MonterHealthApiFilterBundle::class => ['all' => true],
];
// src/Entity/Book.php
namespace App\Entity;
use MonterHealth\ApiFilterBundle\Attribute\ApiFilter;
use MonterHealth\ApiFilterBundle\Filter\BooleanFilter;
use MonterHealth\ApiFilterBundle\Filter\DateFilter;
use MonterHealth\ApiFilterBundle\Filter\OrderFilter;
use MonterHealth\ApiFilterBundle\Filter\RangeFilter;
use MonterHealth\ApiFilterBundle\Filter\SearchFilter;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\GeneratedValue;
#[ORM\Entity(repositoryClass: BookRepository::class)]
#[ApiFilter(BooleanFilter::class, properties: ["available"])]
#[ApiFilter(SearchFilter::class, properties: [
"bookReferences.referencedBook.title"
])]
#[ApiFilter(SearchFilter::class, properties: [
"title",
"author" => OrderFilter::ASCENDING, // set the default order direction
"pages" => OrderFilter::DESCENDING,
"published"
])]
class Book
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255, nullable: true)]
#[ApiFilter(SearchFilter::class)]
private ?string $title = null;
#[ORM\OneToMany(mappedBy: 'books', targetEntity: Author::class)]
#[ApiFilter(SearchFilter::class)]
private ?string $author = null;
#[ORM\Column]
#[ApiFilter(SearchFilter::class)]
private ?int $pages = null;
#[ORM\Column(type: Types::DATE_MUTABLE)]
#[ApiFilter(DateFilter::class)]
private ?\DateTimeInterface $published = null;
#[ORM\Column]
#[ApiFilter(OrderFilter::class, properties: [OrderFilter::DESCENDING])]
private ?bool $available = null;
#[ORM\OneToMany(mappedBy: 'book', targetEntity: BookReference::class)]
private Collection $bookReferences;
// ...
}
// src/Controller/BookController.php
namespace App\Controller;
use App\Repository\BookRepository;
use MonterHealth\ApiFilterBundle\MonterHealthApiFilter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Attribute\Route;
class BookController extends AbstractController
{
/**
* @param Request $request
* @param BookRepository $repository
* @param MonterHealthApiFilter $monterHealthApiFilter
* @return JsonResponse
* @throws \ReflectionException
*/
#[Route('books', name: 'get_books', methods: ["GET"])]
public function getBooks(Request $request, BookRepository $repository, MonterHealthApiFilter $monterHealthApiFilter): JsonResponse
{
$queryBuilder = $repository->findAllQueryBuilder();
$monterHealthApiFilter->addFilterConstraints($queryBuilder, $repository->getClassName(), $request->query);
return new JsonResponse($queryBuilder->getQuery()->getArrayResult());
}
}
$rectorConfig->ruleWithConfiguration(AnnotationToAttributeRector::class, [
new AnnotationToAttribute('ApiFilter'),
]);