public function normalize($object, $format = null, array $context = [])
{
$data = $this->collectionNormalizer->normalize($object, $format, $context);
if (isset($context['api_sub_level'])) {
return $data;
}
if ($paginated = $object instanceof PaginatorInterface) {
$currentPage = $object->getCurrentPage();
$lastPage = $object->getLastPage();
if (1.0 === $currentPage && 1.0 === $lastPage) {
// Consider the collection not paginated if there is only one page
$paginated = false;
}
}
$parsed = IriHelper::parseIri($context['request_uri'] ?? '/', $this->pageParameterName);
$appliedFilters = $parsed['parameters'];
unset($appliedFilters[$this->enabledParameterName]);
if ([] === $appliedFilters && !$paginated) {
return $data;
}
$data['hydra:view'] = ['@id' => IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $paginated ? $currentPage : null), '@type' => 'hydra:PartialCollectionView'];
if ($paginated) {
$data['hydra:view']['hydra:first'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, 1.0);
$data['hydra:view']['hydra:last'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $lastPage);
if (1.0 !== $currentPage) {
$data['hydra:view']['hydra:previous'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $currentPage - 1.0);
}
if ($currentPage !== $lastPage) {
$data['hydra:view']['hydra:next'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $currentPage + 1.0);
}
}
return $data;
}