* @template TData of BaseQuery * @param class-string $type * @param TData $data * @param array $options * @return FormInterface */ protected function createSearchForm(string $type, BaseQuery $data, array $options = []): FormInterface { return $this->container ->get('form.factory') ->createNamed('', $type, $data, array_merge(['method' => 'GET'], $options)); } protected function getDateTimeFactory(?User $user = null): DateTimeFactory { if (null === $user) { $user = $this->getUser(); } return DateTimeFactory::createByUser($user); } protected function prepareBaseQuery(BaseQuery $query, ParamFetcherInterface $paramFetcher): void { $query->setIsApiCall(true); $query->setCurrentUser($this->getUser()); $all = $paramFetcher->all(true); if (array_key_exists('page', $all)) { $page = $all['page']; if (\is_string($page) && $page !== '') { $query->setPage((int) $page); } } if (array_key_exists('size', $all)) { $size = $all['size']; if (\is_string($size) && $size !== '') { $query->setPageSize((int)$size); } } if (array_key_exists('pageSize', $all)) { $size = $all['pageSize']; if (\is_string($size) && $size !== '') { $query->setPageSize((int)$size); } } } protected function createViewForPagination(Pagination $pagination): View { $results = (array) $pagination->getCurrentPageResults(); $view = new View($results, 200); $view->setHeader('X-Page', (string) $pagination->getCurrentPage()); $view->setHeader('X-Total-Count', (string) $pagination->getNbResults()); $view->setHeader('X-Total-Pages', (string) $pagination->getNbPages()); $view->setHeader('X-Per-Page', (string) $pagination->getMaxPerPage()); return $view; } }