public function normalize($object, $format = null, array $context = [])
{
$data = [];
if (isset($context['api_sub_level'])) {
foreach ($object as $index => $obj) {
$data[$index] = $this->normalizer->normalize($obj, $format, $context);
}
return $data;
}
$resourceClass = $this->resourceClassResolver->getResourceClass($object, $context['resource_class'] ?? null, true);
$context = $this->initContext($resourceClass, $context);
$parsed = IriHelper::parseIri($context['request_uri'] ?? '/', $this->pageParameterName);
$paginated = $isPaginator = $object instanceof PaginatorInterface;
if ($isPaginator) {
$currentPage = $object->getCurrentPage();
$lastPage = $object->getLastPage();
$itemsPerPage = $object->getItemsPerPage();
$paginated = 1.0 !== $lastPage;
}
$data = ['_links' => ['self' => IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $paginated ? $currentPage : null)]];
if ($paginated) {
$data['_links']['first'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, 1.0);
$data['_links']['last'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $lastPage);
if (1.0 !== $currentPage) {
$data['_links']['prev'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $currentPage - 1.0);
}
if ($currentPage !== $lastPage) {
$data['_links']['next'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $currentPage + 1.0);
}
}
foreach ($object as $obj) {
$item = $this->normalizer->normalize($obj, $format, $context);
$data['_embedded']['item'][] = $item;
$data['_links']['item'][] = $item['_links']['self'];
}
if (is_array($object) || $object instanceof \Countable) {
$data['totalItems'] = $object instanceof PaginatorInterface ? (int) $object->getTotalItems() : count($object);
}
if ($isPaginator) {
$data['itemsPerPage'] = (int) $itemsPerPage;
}
return $data;
}