From 31b82a97dcb018a3c6c06756658fab3a632f5146 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=A7=D0=B5=D1=80?= =?UTF-8?q?=D0=BD=D1=8B=D1=85?= Date: Wed, 26 Feb 2025 11:19:23 +0500 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=20?= =?UTF-8?q?README=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/README.md b/README.md index e69de29..a2f298d 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,77 @@ +
+

Doctrine HTTP Filter

+
+ +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 \ No newline at end of file -- GitLab