[PHP] Un adaptateur Meilisearch pour Pagerfanta
Publié le 21/05/2023 • Actualisé le 21/05/2023
Dans ce bout de code, nous voyons comment créer un adaptateur Meilisearch pour la librairie de pagination Pagerfanta. Comment vous pouvez le voir, c'est assez facile. J'essaierai de faire une PR quand je trouverai un peu de temps, sinon n'hésitez à la faire si vous en avez besoin. On peut l'utiliser comme ceci :
$pagination = (new Pagerfanta(new MeilisearchAdapter($searchResult)))->setCurrentPage($page);
ou $searchResult
est un objet Meilisearch\Search\SearchResult
.
<?php
declare(strict_types=1);
namespace App\Search\Pager;
use Meilisearch\Search\SearchResult;
use Pagerfanta\Adapter\AdapterInterface;
/**
* Adapter which calculates pagination from a Meilisearch SearchResult object.
*
* @template T
*
* @implements AdapterInterface<T>
*/
final readonly class MeilisearchAdapter implements AdapterInterface
{
public function __construct(
public SearchResult $searchResult,
) {
}
/**
* @phpstan-return int<0, max>
*/
public function getNbResults(): int
{
return max(0, $this->searchResult->getTotalHits());
}
/**
* @phpstan-param int<0, max> $offset
* @phpstan-param int<0, max> $length
*
* @return array<int, T>
*/
public function getSlice(int $offset, int $length): iterable
{
return $this->searchResult->getHits(); /** @phpstan-ignore-line */
}
}