====== SearchController ====== **Layer:** ''Controller'' · **Source:** ''lib/controller/SearchController.php:21'' (lines 21–301) ---- class SearchController Handles frontend search requests with HTMX fragment support. ======= Docblock Metadata ======= ^ Tag ^ Value ^ | ''@category'' | Controller | | ''@author'' | Scriptlog | | ''@license'' | MIT | | ''@version'' | 1.0 | ======= Inheritance ======= //No parent, interface or trait. This is a root type.// ======= Constants (0) ======= //None.// ======= Properties (5) ======= ^ Visibility ^ Type ^ Name ^ Default ^ Line ^ | ''private'' | ''(untyped)'' | ''$searchFinder'' | | 26 | | ''private'' | ''(untyped)'' | ''$themeRenderer'' | | 31 | | ''private'' | ''(untyped)'' | ''$perPage'' | ''10'' | 36 | | ''private'' | ''(untyped)'' | ''$rateLimitMax'' | ''30'' | 41 | | ''private'' | ''(untyped)'' | ''$rateLimitWindow'' | ''60'' | 46 | ======= Methods (6) ======= ^ Visibility ^ Method ^ Summary ^ Line ^ | public | ''__construct()'' | (undocumented) | 48 | | private | ''checkRateLimit()'' | Check rate limit for search endpoint. | 59 | | public | ''search()'' | Handle search request — returns full page or fragment. | 78 | | private | ''buildPagination()'' | Build pagination data from search results. | 182 | | private | ''renderPaginationHtml()'' | Render pagination HTML matching existing theme pattern. | 221 | | private | ''renderFullSearch()'' | Render full search results page. | 285 | ======== __construct() ======== public function __construct(?ThemeRendererInterface $themeRenderer = null, ?SearchFinder $searchFinder = null) //lines 48–52 (5)// ^ Parameter ^ Type ^ Default ^ Description ^ | ''$themeRenderer'' | [[scriptlog:lib:core:themerendererinterface|''?ThemeRendererInterface'']] | ''null'' | //none// | | ''$searchFinder'' | [[scriptlog:lib:core:searchfinder|''?SearchFinder'']] | ''null'' | //none// | ======== checkRateLimit() ======== private function checkRateLimit(): bool //lines 59–73 (15)// Check rate limit for search endpoint. //Takes no parameters.// **Returns:** ''bool'' — bool ======== search() ======== public function search(): void //lines 78–173 (96)// Handle search request — returns full page or fragment. //Takes no parameters.// **Returns:** ''void'' ======== buildPagination() ======== private function buildPagination(array $results, string $keyword): array //lines 182–211 (30)// Build pagination data from search results. ^ Parameter ^ Type ^ Default ^ Description ^ | ''$results'' | ''array'' | //required// | //none// | | ''$keyword'' | ''string'' | //required// | //none// | **Returns:** ''array'' — array ======== renderPaginationHtml() ======== private function renderPaginationHtml(int $currentPage, int $totalPages, string $path): string //lines 221–276 (56)// Render pagination HTML matching existing theme pattern. ^ Parameter ^ Type ^ Default ^ Description ^ | ''$currentPage'' | ''int'' | //required// | //none// | | ''$totalPages'' | ''int'' | //required// | //none// | | ''$path'' | ''string'' | //required// | //none// | **Returns:** ''string'' — string ======== renderFullSearch() ======== private function renderFullSearch(array $results, string $keyword = '', array $pagination = []): void //lines 285–300 (16)// Render full search results page. ^ Parameter ^ Type ^ Default ^ Description ^ | ''$results'' | ''array'' | //required// | //none// | | ''$keyword'' | ''string'' | '''''' | //none// | | ''$pagination'' | ''array'' | ''[]'' | //none// | **Returns:** ''void'' ======= Imports ======= ^ Alias ^ Fully-qualified name ^ | ''SearchFinder'' | [[scriptlog:lib:core:searchfinder|''Scriptlog\Core\SearchFinder'']] | | ''ThemeRendererInterface'' | [[scriptlog:lib:core:themerendererinterface|''Scriptlog\Core\ThemeRendererInterface'']] | ---- //This page is generated from source by 'tools/gendoc'. Edits will be overwritten.//