[PHP] Un adaptateur Meilisearch pour Pagerfanta

Publié le 21/05/2023 • Actualisé le 21/05/2023


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

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 */
    }
}

  Lire la doc  Snippet aléatoire

  Travaillez avec moi !