Skip to content
Snippets Groups Projects
README.md 2.77 KiB
Newer Older
<div align="center">
    <h1>Doctrine HTTP Filter</h1>
</div>

Doctrine HTTP Filter – это PHP-библиотека для создания запросов в Doctrine с учётом параметров выборки,
полученных из Symfony Request.

## Требования
- PHP 8.3+
- Doctrine ORM 3.3+
- Symfony Http Foundation 7.2+

## Использование

### Настройка репозиториев Doctrine ORM

Для использования библиотеки необходимо унаследовать репозиторий от `HttpFilterEntityRepository`.

```php
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Mapping\ClassMetadata;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilterEntityRepository;
use App\Entity\Post;

class PostRepository extends HttpFilterEntityRepository
{
    public function __construct(EntityManagerInterface $em)
    {
        parent::__construct($em, new ClassMetadata(Post::class));
    }

    public function getAliasTableForFilter(): string
    {
        return 'p';
    }
}
```

После этого в репозитории станет доступен метод `createQueryByFilter`, который принимает набор фильтров и, при необходимости, объект `Request`.

### Пример фильтрации

Для фильтрации **используется query-параметр filters из Request**.

Набор фильтров представляет собой массив, где ключ – это поле для фильтрации, а значение – тип фильтра.

Ключ фильтрации соответствует ключу из `Request` и, в случае стандартных фильтров, колонке фильтруемой сущности.

```php
use IQDEV\Packages\DoctrineHttpFilter\Filter\Where;
use Symfony\Component\HttpFoundation\Request;

$filters = [
    'title' => Where::class,
];

// Этот параметр необязательный. В случае null будет собран из Request::createFromGlobals();
$request = new Request([ 'filters' => [ 'title' => 'Example' ]]);

$posts = $postRepository
    ->createQueryByFilter($filters, $request)
    ->getQuery()
    ->getResult();
```

## Roadmap

- [x] Добавить базовые интерфейсы/классы для работы с фильтрацией
- [ ] Добавить базовые фильтры:
  - [x] Where
  - [ ] Like
  - [ ] ILike
  - [ ] Range
  - [ ] In
  - [ ] Date
  - [ ] DateRange
- [ ] Добавить возможность сортировки
- [ ] Добавить поддержку вендорных и других кастомных реализаций EntityManager вместе с HttpFilterEntityRepository