getQuery() === '') { return new Response('', 400, [], 'Argument "query" is missing or empty.'); } $results = $this->searchService->find($mutableSearchDemand); $pagination = new SlidingWindowPagination($results, 15); $response = [ 'pagination' => [ 'itemsPerPage' => SearchDemand::DEFAULT_LIMIT, 'currentPage' => $pagination->getPaginator()->getCurrentPageNumber(), 'firstPage' => $pagination->getFirstPageNumber(), 'lastPage' => $pagination->getLastPageNumber(), 'allPageNumbers' => $pagination->getAllPageNumbers(), 'previousPageNumber' => $pagination->getPreviousPageNumber(), 'nextPageNumber' => $pagination->getNextPageNumber(), 'hasMorePages' => $pagination->getHasMorePages(), 'hasLessPages' => $pagination->getHasLessPages(), ], 'results' => $results->getPaginatedItems(), ]; return new JsonResponse($response); } public function formAction(ServerRequestInterface $request): ResponseInterface { $hints = [ 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:liveSearch_helpDescriptionPages', 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:liveSearch_helpDescriptionContent', 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:liveSearch_help.shortcutOpen', ]; $event = $this->eventDispatcher->dispatch( new BeforeLiveSearchFormIsBuiltEvent($hints, $request) ); $hints = $event->getHints(); $searchDemand = $event->getSearchDemand(); $randomHintKey = array_rand($hints); $additionalViewData = $event->getAdditionalViewData(); $searchProviders = $this->searchService->getSearchProviderState($searchDemand); $activeOptions = 0; // `isActive` is the result of `in_array()`, which returns a `bool`. $activeOptions += count(array_filter($searchProviders, fn(array $searchProviderOption): bool => $searchProviderOption['isActive'])); $view = $this->backendViewFactory->create($request, ['typo3/cms-backend']); if ($additionalViewData !== []) { $view->assignMultiple($additionalViewData); } $view->assignMultiple([ 'searchDemand' => $searchDemand, 'hint' => $this->getLanguageService()->sL($hints[$randomHintKey]), 'searchProviders' => $searchProviders, 'activeOptions' => $activeOptions, ]); $response = new Response(); $response->getBody()->write($view->render('LiveSearch/Form')); return $response; } private function getLanguageService(): LanguageService { return $GLOBALS['LANG']; } }