Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-11-2017 11:23:18

RomainG
Membre
Date d'inscription: 10-06-2015
Messages: 65

Zend paginator et cache

Bonjour à tous,

afin d'améliorer les performances de mon application, je souhaiterais mettre en cache les retours du Paginator. J'ai vu dans la doc qu'on pouvait mettre en cache les données issues de celui-ci via la méthode setCache().

Ce que j'ai pour l'instant au niveau de mon paginator est ceci :

Code:

[lang=php]
// méthode générique pour l'ensemble des données paginées de mon application
public function setPaginator($select, $limit = null) {
        $doctrineAdapter = new DoctrinePaginator(new \Doctrine\ORM\Tools\Pagination\Paginator($select));
        $paginator = new Paginator($doctrineAdapter);
        (isset($limit) && $limit>0) ? $paginator->setItemCountPerPage($limit) : ($this->params('nbrowpage', null) ? $paginator->setItemCountPerPage($this->params('nbrowpage')): $paginator->setItemCountPerPage(LIMIT));
        $paginator->setCurrentPageNumber($this->params('page', 1));
        return $paginator;
}

J'ai donc suivi la doc afin de mettre les données en cache pour avoir une fonction du style :

Code:

[lang=php]
public function setPaginator($select, $limit = null) {
        $doctrineAdapter = new DoctrinePaginator(new \Doctrine\ORM\Tools\Pagination\Paginator($select));
        $paginator = new Paginator($doctrineAdapter);
        (isset($limit) && $limit>0) ? $paginator->setItemCountPerPage($limit) : ($this->params('nbrowpage', null) ? $paginator->setItemCountPerPage($this->params('nbrowpage')): $paginator->setItemCountPerPage(LIMIT));
        $paginator->setCurrentPageNumber($this->params('page', 1));
        $cache = StorageFactory::adapterFactory( 'filesystem', [
            'ttl' => 3600,
        ] );
        $cache->addPlugin( StorageFactory::pluginFactory( 'serializer' ) );
        $paginator::setCache( $cache );
        if ( \is_array( $paginator->getPageItemCache() ) ) {
            return $paginator->getPageItemCache();
        } 
        return $paginator;
}

Le problème, c'est d'une fois que j'ai les données en cache, je pers totalement la pagination et l'accès aux autres pages...
Je pense que je m'y prends mal et que je ne devrais pas retourner les données en cache via le return $paginator->getPageItemCache().

J'ai donc testé sans retourné les pages en cache via la méthode précédemment citée mais il ne me semble pas que les données en cache soient récupérées. Quand je regarde au niveau du nombre de requêtes de ma page, celui-ci n'est pas modifié, même quand je fais appel à des données présentent dans le cache...

Avez-vous déjà eu ce genre de problème ? Comment je pourrais m'y prendre pour récupérer à la fois les données en cache et la pagination ?

Merci d'avance pour vos réponses.
Romain

Hors ligne

 

#2 21-11-2017 10:24:40

RomainG
Membre
Date d'inscription: 10-06-2015
Messages: 65

Re: Zend paginator et cache

Salut,

pas d'idées pour ce petit problème ?

Romain

Hors ligne

 

#3 22-11-2017 11:22:12

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Zend paginator et cache

Hello, personnellement je ne fais pas comme ça quand j'ai besoin de mettre des données en cache venant de doctrine. Ce que je te conseil c'est directement d'utiliser le cache au niveau de la requête doctrine via la méthode userResultCache

Hors ligne

 

#4 22-11-2017 17:40:29

RomainG
Membre
Date d'inscription: 10-06-2015
Messages: 65

Re: Zend paginator et cache

Salut Orkin,
merci pour ta réponse.

Je pensais utiliser la méthode "useResultCache" de Doctrine mais je me demandais à quels moments les résultats en cache étaient supprimés (en dehors du ttl).
Par exemple, je fait une requête sur le paginator, les résultats sont mis en cache par Doctrine, ok, c'est cool !

Maintenant, sur la même page, j'ai la possibilité de filtrer les résultats via un formulaire. Si j'ai des résultats déjà en cache mais que j'applique un filtre de recherche, est-ce que le cache va être invalidé ?
Concrètement, comment se déroule la mise en cache avec Doctrine (je parle au niveau du cacheResult) ?
Est-ce à moi d'invalider le cache lorsque j'applique un filtre ?

Merci d'avance !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages