Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7a70efa

Browse files
committed
feature EasyCorp#4783 Respect filters while searching, add additional search event (pkly)
This PR was submitted for the master branch but it was squashed and merged into the 3.x branch instead. Discussion ---------- Respect filters while searching, add additional search event Fixes EasyCorp#4707 Commits ------- 0e00044 Respect filters while searching, add additional search event
2 parents 802ba2f + 0e00044 commit 7a70efa

4 files changed

Lines changed: 51 additions & 1 deletion

File tree

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace EasyCorp\Bundle\EasyAdminBundle\Event;
4+
5+
use Doctrine\ORM\QueryBuilder;
6+
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
7+
use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
8+
9+
final class AfterEntitySearchEvent
10+
{
11+
private $queryBuilder;
12+
private $searchDto;
13+
private $entityDto;
14+
15+
public function __construct(QueryBuilder $queryBuilder, SearchDto $searchDto, EntityDto $entityDto)
16+
{
17+
$this->queryBuilder = $queryBuilder;
18+
$this->searchDto = $searchDto;
19+
$this->entityDto = $entityDto;
20+
}
21+
22+
public function getQueryBuilder(): QueryBuilder
23+
{
24+
return $this->queryBuilder;
25+
}
26+
27+
public function getSearchDto(): SearchDto
28+
{
29+
return $this->searchDto;
30+
}
31+
32+
public function getEntityDto(): EntityDto
33+
{
34+
return $this->entityDto;
35+
}
36+
}

src/Orm/EntityRepository.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
1111
use EasyCorp\Bundle\EasyAdminBundle\Dto\FilterDataDto;
1212
use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
13+
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntitySearchEvent;
1314
use EasyCorp\Bundle\EasyAdminBundle\Factory\EntityFactory;
1415
use EasyCorp\Bundle\EasyAdminBundle\Factory\FormFactory;
1516
use EasyCorp\Bundle\EasyAdminBundle\Form\Type\ComparisonType;
@@ -26,13 +27,15 @@ final class EntityRepository implements EntityRepositoryInterface
2627
private $doctrine;
2728
private $entityFactory;
2829
private $formFactory;
30+
private $eventDispatcher;
2931

30-
public function __construct(AdminContextProvider $adminContextProvider, ManagerRegistry $doctrine, EntityFactory $entityFactory, FormFactory $formFactory)
32+
public function __construct(AdminContextProvider $adminContextProvider, ManagerRegistry $doctrine, EntityFactory $entityFactory, FormFactory $formFactory, EventDispatcherInterface $eventDispatcher)
3133
{
3234
$this->adminContextProvider = $adminContextProvider;
3335
$this->doctrine = $doctrine;
3436
$this->entityFactory = $entityFactory;
3537
$this->formFactory = $formFactory;
38+
$this->eventDispatcher = $eventDispatcher;
3639
}
3740

3841
public function createQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder
@@ -148,6 +151,8 @@ private function addSearchClause(QueryBuilder $queryBuilder, SearchDto $searchDt
148151
->setParameter('query_as_words', $dqlParameters['words_query']);
149152
}
150153
}
154+
155+
$this->eventDispatcher->dispatch(new AfterEntitySearchEvent($queryBuilder, $searchDto, $entityDto));
151156
}
152157

153158
private function addOrderClause(QueryBuilder $queryBuilder, SearchDto $searchDto, EntityDto $entityDto): void

src/Resources/config/services.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@
223223
->arg(1, new Reference('doctrine'))
224224
->arg(2, new Reference(EntityFactory::class))
225225
->arg(3, new Reference(FormFactory::class))
226+
->arg(4, new Reference('event_dispatcher'))
226227

227228
->set(EntityFactory::class)
228229
->arg(0, new Reference(FieldFactory::class))

src/Resources/views/layout.html.twig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,14 @@
182182

183183
<form class="form-action-search" method="get">
184184
{% block search_form %}
185+
{% block search_form_filters %}
186+
{% for field, array in ea.search.appliedFilters %}
187+
{% for key, value in array %}
188+
<input type="hidden" name="filters[{{ field }}][{{ key }}]" value="{{ value }}">
189+
{% endfor %}
190+
{% endfor %}
191+
{% endblock %}
192+
185193
<input type="hidden" name="crudAction" value="index">
186194
<input type="hidden" name="crudControllerFqcn" value="{{ ea.request.query.get('crudControllerFqcn') }}">
187195
<input type="hidden" name="menuIndex" value="{{ ea.request.query.get('menuIndex') }}">

0 commit comments

Comments
 (0)