1
0
mirror of https://github.com/ToxicCrack/PrintABrick.git synced 2025-05-16 12:20:09 -07:00
PrintABrick/src/FrontBundle/Controller/SearchController.php
2017-06-28 00:26:57 +02:00

97 lines
3.4 KiB
PHP

<?php
namespace FrontBundle\Controller;
use AppBundle\Service\SearchService;
use FOS\ElasticaBundle\HybridResult;
use Liip\ImagineBundle\Imagine\Cache\CacheManager;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
/**
* Search controller.
*
* @Route("search")
*/
class SearchController extends Controller
{
/**
* @Route("/", name="search_results")
*/
public function searchAction(Request $request, SearchService $searchService)
{
$query = trim(strip_tags($request->get('query')));
return $this->render('search/index.html.twig', [
'sets' => $searchService->searchSetsByQuery($query),
'models' => $searchService->searchModelsByQuery($query),
'query' => $query,
]);
}
/**
* @Route("/autocomplete", name="search_autocomplete")
*/
public function autocompleteAction(Request $request, SearchService $searchService)
{
$query = trim(strip_tags($request->get('query')));
/** @var CacheManager $liip */
$liip = $this->get('liip_imagine.cache.manager');
$setsResult = $searchService->searchSetsHighlightedByQuery($query, 4);
$modelResult = $searchService->searchModelsHighlightedByQuery($query, 4);
$models = [];
/** @var HybridResult $model */
foreach ($modelResult as $model) {
$id = isset($model->getResult()->getHighlights()['id']) ? $model->getResult()->getHighlights()['id'][0] : $model->getTransformed()->getId();
$name = isset($model->getResult()->getHighlights()['name']) ? $model->getResult()->getHighlights()['name'][0] : $model->getTransformed()->getName();
$models[] = [
'id' => $id,
'name' => $name,
'url' => $this->generateUrl('model_detail', ['id' => $model->getTransformed()->getId()]),
'img' => $liip->getBrowserPath('-1/'.$model->getTransformed()->getId().'.png', 'part_min'),
];
}
$sets = [];
/** @var HybridResult $set */
foreach ($setsResult as $set) {
$id = isset($set->getResult()->getHighlights()['id']) ? $set->getResult()->getHighlights()['id'][0] : $set->getTransformed()->getId();
$name = isset($set->getResult()->getHighlights()['name']) ? $set->getResult()->getHighlights()['name'][0] : $set->getTransformed()->getName();
$sets[] = [
'id' => $id,
'name' => $name,
'url' => $this->generateUrl('set_detail', ['id' => $set->getTransformed()->getId()]),
'img' => $liip->getBrowserPath($set->getTransformed()->getId().'.jpg', 'set_min'),
];
}
$response = new JsonResponse();
$response->setData([
'results' => [
'category' => [
'name' => 'Sets',
'results' => $sets,
],
'category1' => [
'name' => 'Models',
'results' => $models,
],
],
// optional action below results
'action' => [
'url' => $this->generateUrl('search_results', ['query' => $query]),
'text' => 'View results',
],
]);
return $response;
}
}