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

MkFramework Discussion :

Problème dans la gestion du cacheVar


Sujet :

MkFramework

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Problème dans la gestion du cacheVar
    Bonjour Imikado,

    D'abord, un grand merci pour ce Framework qui me simplifie la vie

    J'ai un problème en créant un CRUD avec des models mis en cacheVar (sur les findAll).
    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
    public function findAll(){
           $sId='paysFindAll';
     
           if(_root::getCacheVar()->isCached($sId) ){
               $tPays=_root::getCacheVar()->getCached($sId);
           }else{
               $tPays = $this->findMany('SELECT * FROM '.$this->sTable.'   ');
               _root::getCacheVar()->setCache($sId,$tPays);
           }
           return $tPays;
       }
     
    	public function getSelect(){
    		$tab=$this->findAll();
    		$tSelect=array();
    		if($tab){
    		foreach($tab as $oRow){
    			$tSelect[ $oRow->id ]=$oRow->nom;
    		}
    		}
    		return $tSelect;
    	}
    Dans le module CRUD j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function _list(){
     
    		$tAuteur=model_auteur::getInstance()->findAll();
     
    		$oView=new _view('auteur::list');
    		$oView->tAuteur=$tAuteur;
     
    				$oView->tJoinmodel_ville=model_ville::getInstance()->getSelect();
    				$oView->tJoinmodel_pays=model_pays::getInstance()->getSelect();
     
    		$this->oLayout->add('main',$oView);
     
    	}
    Les getSelect faisant appel à la fonction findAll(), j'ai ce résultat sur Ville et Pays:
    Nom : Capture.JPG
Affichages : 79
Taille : 21,4 Ko
    Et les fichiers .cachevar de 'ville' et 'pays' ne sont pas créés, seul le premier existe (auteurFindAll.cachevar).

    En analysant le problème, j'ai constaté que dans la classe lib/framework/class_cacheVar, en supprimant la condition de la fonction load(), ça fonctionne correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private function load($sId){
    		/*if($this->_oFile){
    			return;
    		}*/
    		$oFile=new _file(_root::getConfigVar('path.cache').$sId.'.cachevar');
    		$this->_oFile=$oFile;
    	}
    Nom : Capture2.JPG
Affichages : 68
Taille : 22,2 Ko

    Mais je ne connais pas les conséquences de la suppression de cette condition.

    Pourriez-vous m'éclairer, svp?

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Je pense effectivement que vous avez trouvé un bug que je m'en vais corriger de ce pas, en ajoutant des controles dans ma liste de tests unitaires

    Merci à vous d'utiliser mon framework, n'hésitez pas à en faire la promotion, ce framework peine à être connu
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Je viens de corriger et ajouté une nouvelle version téléchargeable corrigeant le problème.

    Le soucis était present, lorsque sur la meme page on faisait appel à du cache de variable.
    J'utilise désormais un tableau pour garder plusieurs instances à la fois.

    Note: il faut bien penser, lors de l'ajout d'un nouveau pays de supprimer le cache correspondant avec
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _root::getCacheVar()->clearCache($sId);

    note: si vous souhaitez juste corriger la classe en défaut, éditer la classe lib/class_classVar.php
    Code php : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    <?php
    /*
    This file is part of Mkframework.
    
    Mkframework is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License.
    
    Mkframework is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    
    You should have received a copy of the GNU Lesser General Public License
    along with Mkframework.  If not, see <http://www.gnu.org/licenses/>.
    
    */
    /** 
    * _cachevar classe pour gerer le cache de variable (par exemple recordset de requete ORM)
    * @author Mika
    * @link <a href="http://mkf.mkdevs.com/" target="_blank">http://mkf.mkdevs.com/</a>
    */
    class _cacheVar{
     
    	protected $_toFile=null;
     
    	private function load($sId){
    		if($this->_toFile and isset($this->_toFile[$sId]) ){
    			return;
    		}
    		$oFile=new _file(_root::getConfigVar('path.cache').$sId.'.cachevar');
    		$this->_toFile[$sId]=$oFile;
    	}
     
    	/** 
    	* retourne vrai ou faux selon que le cache est rescent
    	* @access public
    	* @param string $sId
    	* @param int $iMinute
    	* @return bool
    	*/
    	public function isCached($sId,$iMinute=null){
    		$this->load($sId);
    		if($this->_toFile[$sId]->exist()){
    			if($iMinute==null){
    				return true;
    			}else if( (time()-$this->_toFile[$sId]->filemtime()) < ($iMinute*60)){
    				return true;
    			}
    			return false;
    		}
    		return false;
    	}
    	/** 
    	* retourne l'objet php $sId en cache
    	* @access public
    	* @return mixed uData
    	*/
    	public function getCached($sId){
    		$this->load($sId);
    		$uData=unserialize($this->_toFile[$sId]->getContent());
    		return $uData;
    	}
    	/** 
    	* met l'objet _view $sId en cache
    	* @access public
    	* @param mixed $uData
    	*/
    	public function setCache($sId,$uData){
    		$this->load($sId);
    		$sData=serialize($uData);
     
    		$this->_toFile[$sId]->setContent($sData );
    		$this->_toFile[$sId]->save();
    	}
    	/** 
    	* supprime l'objet _view $sId en cache
    	* @access public
    	* @param string $sId
    	*/
    	public function clearCache($sId){
    		$this->load($sId);
    		$this->_toFile[$sId]->delete();
    	}
     
     
    }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Wahou, mille mercis, et quelle rapidité, j'm'y attendais pas . Je vais, de ce pas intégrer, les modifications.
    Je confirme, ce framework mérite d'être connu ( et son concepteur aussi ),et j'en ai déjà commencé la promotion

    Encore merci pour tout ce travail et cette dévotion.

  5. #5
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Mille merci à vous pour avoir vu ce bug

    Merci de m'aider à le faire connaitre: plus il sera connu, plus il sera utilisé, plus il sera corrigé/amélioré
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

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

Discussions similaires

  1. Problème dans la gestion des conditions
    Par pouchet64 dans le forum Débuter
    Réponses: 4
    Dernier message: 17/05/2010, 19h06
  2. Réponses: 3
    Dernier message: 02/09/2007, 16h53
  3. Problème dans la gestion d'erreur
    Par Tintou dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/06/2007, 10h02
  4. Problème dans la gestion du CTreeCtrl
    Par vanitom dans le forum Visual C++
    Réponses: 9
    Dernier message: 28/09/2006, 14h29
  5. Réponses: 2
    Dernier message: 11/05/2005, 13h23

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