Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-04-2009 22:45:45

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

[1.7][Zend_Cache] Mettre en cache une action

Bonsoir,

Jusque là je mets en cache seulement des requetes, en fait j'aimerais bien savoir comment mettre proprement une action en cache sans le header et footer, pour éviter des traitements inutiles.
Alors est ce possible déjà ?

Merci


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#2 17-04-2009 16:08:51

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [1.7][Zend_Cache] Mettre en cache une action

Personne a une solution pour ce problème ?


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#3 17-04-2009 18:07:38

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: [1.7][Zend_Cache] Mettre en cache une action

Tu peux créer un plugin qui fonction en preDispatch. Le plugin doit vérifier s'il existe ou pas un cache pour l'action demandé, s'il n'en existe pas, on ajoute un paramètre au contrôleur frontale disant que l'action se trouve en cache, ajouter le rendu de l'action dans la réponse et désactiver le ViewRenderer.

Code:

if($cache->hasCache(monid)) {
     $segment = $cache->get(monid);
     $fc = Zend_Controller_Front::getInstance();
     $fc->setParam('actionInCache', true);
     $fc->setParam('noViewRenderer', true);
     $segmentName = Zend_Controller_Action_HelperBroker::getExistingHelper(ViewRenderer)->getResponseSegment();
     $response->appendBody(
            $segment,
            $segmentName
        );

}

Ensuite dans l'action on vérifie si elle se trouve en cache, si non on exécute notre action et on la met en cache.

Code:

if(!Zend_Controller_Front::getInstance()->getParam('actionInCache'))
{
   //Traitement et ajout en cache.
}

Se code n'a pas été testé, ce n'est peut-être pas la meilleur solution, mais c'est la première qui m'est venu a l'esprit.

Hors ligne

 

#4 21-04-2009 19:16:43

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: [1.7][Zend_Cache] Mettre en cache une action

je viens de tomber sur un article qui pourrait t'être utile.

http://devzone.zend.com/article/3372-Fr … -Framework

Hors ligne

 

#5 21-04-2009 20:42:58

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [1.7][Zend_Cache] Mettre en cache une action

Oui j'avais deja consulter cette page, mais ils proposent un plugin de cache, mais c'est un cache sur toute la page.
Seul moyen que j'ai trouvé est de faire comme ceci:

Dans le controller

Code:

    
public function indexAction()
{        
    $this->view->cache = $this->cache;
    if ($this->cache->test("id_cache") != true) {
        //  Traitement
        ....................
    }
}

Dans la vue

Code:

<?php
$this->headTitle("Nystagmus.fr - Site francophone");

if (!$this->cache->start('id_page')) { ?>
     // HTML
    $this->cache->end();
<?php } ?>

C'est pas très élégant mais ca marche, je met en cache que la partie content du layout.

Si vous avez mieux je suis preneur.
Merci 3uclide

Dernière modification par alien7 (21-04-2009 21:00:03)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#6 21-04-2009 21:36:02

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: [1.7][Zend_Cache] Mettre en cache une action

La première méthode que je t'ai proposé devrait normalement seulement mettre en cache ta vue... et non le layout.

Hors ligne

 

#7 21-04-2009 22:37:34

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [1.7][Zend_Cache] Mettre en cache une action

Bah à vrai dire je le comprends pas tres bien la 1ere methode, si tu pouvais un peu plus le détailler par exemple ca serait bien smile


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

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