3 namespace Wallabag\ApiBundle\Controller
;
5 use Hateoas\Configuration\Route
;
6 use Hateoas\Representation\Factory\PagerfantaFactory
;
7 use Nelmio\ApiDocBundle\Annotation\ApiDoc
;
8 use Pagerfanta\Adapter\DoctrineORMAdapter
;
9 use Pagerfanta\Pagerfanta
;
10 use Symfony\Component\HttpFoundation\JsonResponse
;
11 use Symfony\Component\HttpFoundation\Request
;
13 class SearchRestController
extends WallabagRestController
16 * Search all entries by term.
20 * {"name"="term", "dataType"="string", "required"=false, "format"="any", "description"="Any query term"},
21 * {"name"="page", "dataType"="integer", "required"=false, "format"="default '1'", "description"="what page you want."},
22 * {"name"="perPage", "dataType"="integer", "required"=false, "format"="default'30'", "description"="results per page."}
26 * @return JsonResponse
28 public function getSearchAction(Request
$request)
30 $this->validateAuthentication();
32 $term = $request->query
->get('term');
33 $page = (int) $request->query
->get('page', 1);
34 $perPage = (int) $request->query
->get('perPage', 30);
36 $qb = $this->get('wallabag_core.entry_repository')
37 ->getBuilderForSearchByUser(
38 $this->getUser()->getId(),
43 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false);
44 $pager = new Pagerfanta($pagerAdapter);
46 $pager->setMaxPerPage($perPage);
47 $pager->setCurrentPage($page);
49 $pagerfantaFactory = new PagerfantaFactory('page', 'perPage');
50 $paginatedCollection = $pagerfantaFactory->createRepresentation(
57 'perPage' => $perPage,
63 return $this->sendResponse($paginatedCollection);