Skip to content

Commit 376ebdb

Browse files
committed
Merge branch 'improve-json-ld-hal-partial-pagination' into don-working
2 parents 9dc8e5e + b74f1bb commit 376ebdb

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

src/Hal/Serializer/CollectionNormalizer.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ protected function getPaginationData(iterable $object, array $context = []): arr
5353
];
5454

5555
if ($paginated) {
56+
$data['_links']['first']['href'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, 1., $urlGenerationStrategy);
57+
5658
if (null !== $lastPage) {
57-
$data['_links']['first']['href'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, 1., $urlGenerationStrategy);
5859
$data['_links']['last']['href'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $lastPage, $urlGenerationStrategy);
5960
}
6061

src/JsonApi/Serializer/CollectionNormalizer.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ protected function getPaginationData($object, array $context = []): array
5454
];
5555

5656
if ($paginated) {
57+
$data['links']['first'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, 1., $urlGenerationStrategy);
58+
5759
if (null !== $lastPage) {
58-
$data['links']['first'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, 1., $urlGenerationStrategy);
5960
$data['links']['last'] = IriHelper::createIri($parsed['parts'], $parsed['parameters'], $this->pageParameterName, $lastPage, $urlGenerationStrategy);
6061
}
6162

src/Serializer/AbstractCollectionNormalizer.php

+12-3
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,24 @@ protected function getPaginationConfig(iterable $object, array $context = []): a
135135

136136
if ($object instanceof PartialPaginatorInterface) {
137137
$paginated = $paginator = true;
138+
$currentPage = $object->getCurrentPage();
139+
$itemsPerPage = $object->getItemsPerPage();
140+
138141
if ($object instanceof PaginatorInterface) {
139142
$paginated = 1. !== $lastPage = $object->getLastPage();
140143
$totalItems = $object->getTotalItems();
141144
} else {
142145
$pageTotalItems = (float) \count($object);
146+
if ($pageTotalItems < $itemsPerPage) {
147+
// this is likely the last page, include it
148+
$lastPage = $object->getCurrentPage();
149+
150+
// we can also infer the total items
151+
$maxPossibleItems = $object->getCurrentPage() * $itemsPerPage;
152+
$missingItems = $itemsPerPage - $pageTotalItems;
153+
$totalItems = $maxPossibleItems - $missingItems;
154+
}
143155
}
144-
145-
$currentPage = $object->getCurrentPage();
146-
$itemsPerPage = $object->getItemsPerPage();
147156
} elseif (is_countable($object)) {
148157
$totalItems = \count($object);
149158
}

0 commit comments

Comments
 (0)