IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres composants PHP Discussion :

[Zend_Cache] Comment supprimer un élément ?


Sujet :

Autres composants PHP

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut [Zend_Cache] Comment supprimer un élément ?
    Bonsoir,

    Je voudrai supprimer un élément du cache si je modifie l'élément qui y est placé. Au cas ou, voici mon code tiré de la doc pour créer mon cache, si vous pensez qu'il n'est pas optimisé, n'hésitez pas à me le dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    		$frontendOptions = array(
    		   'lifetime' => 7200, // temps de vie du cache de 2 heures
    		   'automatic_serialization' => true
    		);
     
    		$backendOptions = array(
    		    'cache_dir' => './data/cache' // Répertoire où stocker les fichiers de cache
    		);
     
    		// créer un objet Zend_Cache_Core
    		self::$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);    	
    ...		//==========================================================================
    		//	Menu : Gestion des pages de déplacement BD
    		//==========================================================================			
    		if(!$menuGestionPage = self::$cache->load('menuGestionPage')) 
    		{
    			$menuGestionPage = new MenuGestionPage();		
    			Zend_Registry::set('menuGestionPage', $menuGestionPage);		//-- Enregistrement dans le registry			
    		    self::$cache->save($menuGestionPage, 'menuGestionPage');			
    		} 
    		else {				
    			Zend_Registry::set('menuGestionPage', $menuGestionPage);		//-- Enregistrement dans le registry							
    		}
    Voilà, mais je souhaiterai supprimer dans cet exemple $menuGestionPage du cache dés qu'il est modifié afin de le recharger. J'ai du mal à comprendre la fonction a utilisé car lorsque je fouille dans les sources, je n'ai pas de classe Abstract Cache comme j'ai l'habitude de voir. Dans la classe Core.php, j'ai une méthode remove($id) mais je ne suis pas sûr que c'est la méthode à utiliser. Je ne pige pas vraiment l'histoire du backend et frontend, sachant que je veux juste stocker une variable et la retirer.

    Merci pour vos conseils.

  2. #2
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    Bonsoir ()
    Si j'ai bien compris le fonctionnement du Cache, la récupération / sauvegarde de variables se fais par load / save
    Si on regarde sur Zend_Cache_Core, fonction load : $data = $this->_backend->load($id, $doNotTestCacheValidity);

    Donc, j'en déduit que le Backend sert à la manipulation des données, mais c'est pas la question la \o/
    ( Et le Frontend ( Core ), c'est l'interfacage avec le Backend ( File ), du coup )
    Bref, vu que tu as des fonctions load / save sur le Core, j'en déduit que la methode remove sert bien à supprimer une variable du Cache. Si on regarde la doc dans le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /**
         * Remove a cache
         *
         * @param string $id cache id to remove <- ca c'est le petit nom qu'ils donnent à l'identifiant de ta variable dans le cache
         * @return boolean true if ok
         */
    Wala, bonne chance \o/
    LoveAngel :: Meow( );
    Personne ne remarque ce qui marche trop bien. Procrastination, Terry Pratchett

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Mais est-ce qu'il faut que je me soucie d'une façon plus précise du backend ou du frontend ? Mes connaissances actuelles sur le cache sont limités et je vois plus le cache comme une session : j'enregistre des valeurs, je reprends des valeurs et j'efface. La dedans, je ne vois pas ce que viens faire le backend, frontend & co.

    Pouvez-vous me donner des explications à ce sujet, svp ? il me manque un truc avant de mettre en pratique ce que je lis dans la doc...

  4. #4
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    Rebonjour,
    Je pense que tu n'a pas à t'embeter avec les histoires de Backend / Frontend. Il faut pas exactement voir ca comme une session, vu que la session depends du client, il faut plutôt voir ca comme un moyen de sauvegarder des variables pour l'ensemble d'un site, quelque soit le client, mais sinon, c'est effectivement une session

    Les histoires de Backend / Frontend, c'est uniquement du blabla un peu dur à comprendre, en faite, le Frontend Core, c'est celui de base, il te permet d'interfacer ton Backend, donc bah, il sert 'en gros' à rien d'autres qu'à apeller les fonctions du Backend ( de ce que j'ai compris ).
    Ensuite, le Zend_Cache :: factory( ... ), il ne fais que te renvoyer une instance de Zend_Cache_Core, dans notre cas
    Le Backend, File, est juste une interface entre ton Frontend, et ton fichier dans lequel sont stockées tes variables, c'est le Backend qui est chargé des accès fichiers ( idem, de ce que j'en ai compris )

    Donc, pour résumer :
    tu utilise le cache quand tu veux stocker une variable sur la durée ( pour une durée determinée ), pour l'ensemble de ton site. Le repertoire de stockage doit être accessible en écriture pour ZF, tu peux y mettre plusieurs caches differents. En faite, chaque variable mise en cache corresponds à ( je crois ) 2 fichiers, le premier qui définit les temps de vie & autres, le seconds contenant la variable stockée serialisée, autrement dit : ne pas stocker de flux.
    Sinon, une variable mise en cache n'est pas détruite avant la fin de sa vie ( ou un appel à remove sur cette variable )

    Je sais pas si c'est ce que tu cherche, mais voila à peu près comment faire pour se servir du cache

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $cache = Zend_Cache :: factory( ... ) //Avec les paramètres que tu avais ca passe bien
    if( $liste = $cache -> load( 'variable' ) ){
    //Traitement à faire si le cache n'existe pas
     
    $cache -> save( $liste, 'variable' );
    }
     
    ...
    //Traitement à faire dans tous les cas sur la variable $liste
    De la, tu peux t'en servir pour stocker ce que tu veux, tant que tu ne fais pas de remove et que le temps de vie n'est pas écoulé, ton $cache -> load te renverra ta variable, quelque soit l'endroit ou tu est dans ton site ( tant que tu utilise le même Backend, je crois )

    Pour plus de simplicité, j'ai mis une instance du Cache dans le registre à partir du bootstrap, comme ca tu as directement ton cache par un Zend_Registry :: get( 'cache' ), pas de reinstanciation à faire dès que tu l'utilise dans une fonction

    En esperant que ca t'aides
    LoveAngel :: Meow( );
    Personne ne remarque ce qui marche trop bien. Procrastination, Terry Pratchett

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Merci beaucoup pour tes explications claires et le temps que tu as mis pour pondre ce long message. C'était les explications que j'attendais, pour le moment .

    Bonne fin de semaine.

    PS: si vous avez des sites ou des tutos sur le cache afin d'en faire une bonne utilisation, je suis preneur.

    PS: Le cache fait quoi mise à part serialiser et désarialiser des données ?

  6. #6
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    Citation Envoyé par whitespirit Voir le message
    Merci beaucoup pour tes explications claires et le temps que tu as mis pour pondre ce long message. C'était les explications que j'attendais, pour le moment .

    Bonne fin de semaine.

    PS: si vous avez des sites ou des tutos sur le cache afin d'en faire une bonne utilisation, je suis preneur.

    PS: Le cache fait quoi mise à part serialiser et désarialiser des données ?
    De rien \o/ Ca aide de penser à autre chose un peu de fois

    J'vais essayer de faire simple :
    fonction save:
    ->serialisation
    -> création d'un fichier de description de la variable
    -> création du fichier de données ou ta variable est stockée

    fonction load:
    -> lecture du fichier de description
    si le temps de vie est dépassé :
    -> supression des 2 fichiers
    sinon
    -> lecture du fichier de données
    -> desérialisation

    Je pense que tu peux utiliser les fonctions magiques __sleep et __unsleep pour regler la serialisation / desérialisation ( à voir )

    PS : c'pas long de faire un message comme ca \o/ y'a pas à y réfléchir, puis pendant que je fais bosser Lucène, y'a le temps

    Bref, bonne chance \o/ et Joyeux Noël !!
    LoveAngel :: Meow( );
    Personne ne remarque ce qui marche trop bien. Procrastination, Terry Pratchett

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/09/2011, 09h31
  2. Comment supprimer un élément d'une loop ?
    Par Battosaiii dans le forum PL/SQL
    Réponses: 9
    Dernier message: 14/06/2011, 10h45
  3. Comment supprimer un élément d'une ListView ?
    Par xXO--Hades--OXx dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 12/12/2010, 16h57
  4. Comment supprimer des éléments d'un fichier?
    Par quent197 dans le forum Débuter
    Réponses: 4
    Dernier message: 13/05/2008, 09h30
  5. Réponses: 7
    Dernier message: 16/05/2006, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo