Skip to content

Commit a8fbe82

Browse files
committed
Show entity results
1 parent 19c21eb commit a8fbe82

File tree

4 files changed

+27
-4
lines changed

4 files changed

+27
-4
lines changed

src/Controller/Action/SearchAction.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,49 @@
44

55
namespace Setono\SyliusMeilisearchPlugin\Controller\Action;
66

7+
use Doctrine\Persistence\ManagerRegistry;
78
use Meilisearch\Client;
9+
use Setono\Doctrine\ORMTrait;
810
use Setono\SyliusMeilisearchPlugin\Config\IndexRegistryInterface;
11+
use Setono\SyliusMeilisearchPlugin\Model\IndexableInterface;
912
use Setono\SyliusMeilisearchPlugin\Resolver\IndexName\IndexNameResolverInterface;
1013
use Symfony\Component\HttpFoundation\Request;
1114
use Symfony\Component\HttpFoundation\Response;
1215
use Twig\Environment;
1316

1417
final class SearchAction
1518
{
19+
use ORMTrait;
20+
1621
public function __construct(
22+
ManagerRegistry $managerRegistry,
1723
private readonly Environment $twig,
1824
private readonly IndexNameResolverInterface $indexNameResolver,
1925
private readonly IndexRegistryInterface $indexRegistry,
2026
private readonly Client $client,
2127
/** @var list<string> $searchIndexes */
2228
private readonly array $searchIndexes,
2329
) {
30+
$this->managerRegistry = $managerRegistry;
2431
}
2532

2633
public function __invoke(Request $request): Response
2734
{
2835
$indexNames = array_map(fn (string $searchIndex) => $this->indexNameResolver->resolve($this->indexRegistry->get($searchIndex)), $this->searchIndexes);
2936

37+
$items = [];
38+
3039
foreach ($indexNames as $indexName) {
3140
$searchResult = $this->client->index($indexName)->search($request->query->getString('q'));
32-
dd($searchResult);
41+
42+
/** @var array{entityClass: class-string<IndexableInterface>, entityId: mixed} $hit */
43+
foreach ($searchResult->getHits() as $hit) {
44+
$items[] = $this->getManager($hit['entityClass'])->find($hit['entityClass'], $hit['entityId']);
45+
}
3346
}
3447

3548
return new Response($this->twig->render('@SetonoSyliusMeilisearchPlugin/search/index.html.twig', [
36-
'items' => [],
49+
'items' => $items,
3750
]));
3851
}
3952
}

src/DependencyInjection/SetonoSyliusMeilisearchExtension.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public function load(array $configs, ContainerBuilder $container): void
3434
* @var array{
3535
* indexes: array<string, array{document: class-string<Document>, indexer: string|null, entities: list<class-string>, prefix: string|null}>,
3636
* server: array{ host: string, master_key: string },
37-
* search: array{ enabled: bool, indexes: list<string> },
37+
* search: array{ enabled: bool, route: string, indexes: list<string> },
3838
* routes: array{ search: string }
3939
* } $config
4040
*/
@@ -127,15 +127,17 @@ private static function registerDefaultIndexer(ContainerBuilder $container, stri
127127
}
128128

129129
/**
130+
* todo the search controller should only be available when search is enabled
131+
*
130132
* @param array{ enabled: bool, route: string, indexes: list<string> } $config the search configuration
131133
* @param list<string> $indexes a list of index names
132134
*/
133135
private static function registerSearchConfiguration(array $config, array $indexes, ContainerBuilder $container): void
134136
{
135-
// search
136137
if (true === $config['enabled'] && [] === $config['indexes']) {
137138
throw new \RuntimeException('When you enable search you need to provide at least one index to search');
138139
}
140+
139141
foreach ($config['indexes'] as $index) {
140142
if (!in_array($index, $indexes, true)) {
141143
throw new \RuntimeException(sprintf('For the search configuration you have added the index "%s". That index is not configured in setono_sylius_meilisearch.indexes. Available indexes are [%s]', $index, implode(', ', $indexes)));

src/Resources/config/services/controller.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
44
<services>
55
<service id="Setono\SyliusMeilisearchPlugin\Controller\Action\SearchAction" public="true">
6+
<argument type="service" id="doctrine"/>
67
<argument type="service" id="twig"/>
78
<argument type="service" id="setono_sylius_meilisearch.resolver.index_name"/>
89
<argument type="service" id="setono_sylius_meilisearch.config.index_registry"/>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{% extends '@SyliusShop/layout.html.twig' %}
2+
3+
{% block content %}
4+
{% for item in items %}
5+
{{ item.name }}<br>
6+
{% endfor %}
7+
{% endblock %}

0 commit comments

Comments
 (0)