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

PhpMyObject Discussion :

Bug avec le class_loader


Sujet :

PhpMyObject

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Bug avec le class_loader
    Bonjour,
    l'utilisation d'une méthode définie via le class_loader ne fonctionne pas. La classe est introuvable.

    J'ai fait une bidouille pour corriger:
    Dans PMO_MyObject la methode internalfactory appelle getClassname().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public static function internalfactory(PMO_Table $table){
    		$classname = $table->getClassname(); 
    		if ($classname){		
    			require_once(dirname(__FILE__).'/../class_loader/class_'.$classname.'.php');
    			$object = new $classname($table);
    		}else{
    			$object = new PMO_MyObject($table);	
    		}
    		return $object;
    	}
    Mais dans la classe PMO_MyTable la methode utilise un attribut qui n'est pas défini.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public function getClassname(){
    		if(isset($this->table_classname))
    			return $this->table_classname;		
    		return FALSE;
    	}
    En utilisant getTablename() à la place, c'est OK!

    A noter que la doc indique toujours d'utiliser "extends MyObject" au lieu de "PMO_MyObject"

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 181
    Points : 162
    Points
    162
    Par défaut
    Et oui ça fait parti des modifications de la version 0.12 !

    L'attribut $this->table_classname est NULL
    par défaut

    pourquoi ?

    la v 0.12 crée à la première execution une class PMO_core/cache/PMO_MyTable_lenomdetable.php héritant de PMO_MyTable (si tu veux savoir comment c'est la méthode PMO_MyTable->tocache()).

    C'est cette classe qui est ensuite instanciée à la place de PMO_MyTable


    Si tu l'édites, tu verras que l'attribut

    protected table_classname = NULL
    il suffit de le setter avec le nom de ta class et cela devrait fonctionner

    L'avantage est que cette classe décrit la structure de ta table et définit en dur le nom de la classe PMO_MyObject que tu souhaites utiliser. Ca évite les problèmes de nom de classes déjà utilisés.

    En effet, la documentation n'est pas aussi à jour que le soft :/ je fais mon max pourtant
    PhpMyObject teck leader
    http://pmo.developpez.com

    La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 181
    Points : 162
    Points
    162
    Par défaut
    Je viens de mettre à jour la doc pour PMO_MyObject
    PhpMyObject teck leader
    http://pmo.developpez.com

    La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    OK
    j'ai testé. Cela fonctionne impec.
    Cette manière de faire permet d'avoir un nom de classe différent du nom de la table.

    Mais ce n'est quand même pas très naturel. C'est étonnant de devoir modifier un fichier de cache. Par définition un cache est généré pour permettre une accélération ultérieurement. Un cache a vocation à être effacé.
    Ici cela ressemble plus à un fichier de configuration généré automatiquement. Le fichier est modifié pour coller au mieux à son besoin.
    Une fois modifié sur sa plateforme de développement, le fichier doit être copié sur celle de production et non généré en prod.

    Perso, c'est pas un problème. Je n'ai pas trop de tables. Mais j'imagine mal avec plusieurs dev en parallèle, plusieurs bases..

    Merci pour ta réactivité.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 181
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par chavich Voir le message
    OK
    j'ai testé. Cela fonctionne impec.
    Cette manière de faire permet d'avoir un nom de classe différent du nom de la table.

    Mais ce n'est quand même pas très naturel. C'est étonnant de devoir modifier un fichier de cache. Par définition un cache est généré pour permettre une accélération ultérieurement. Un cache a vocation à être effacé.
    Ici cela ressemble plus à un fichier de configuration généré automatiquement. Le fichier est modifié pour coller au mieux à son besoin.
    Une fois modifié sur sa plateforme de développement, le fichier doit être copié sur celle de production et non généré en prod.

    Perso, c'est pas un problème. Je n'ai pas trop de tables. Mais j'imagine mal avec plusieurs dev en parallèle, plusieurs bases..

    Merci pour ta réactivité.
    Oui c'est exact, je n'avais pas vu la chose sous cet angle. Il s'agit en fait d'une mauvaise appellation de ma part du répertoire "cache/".

    Car ce sont bien des classes, et des classes qui peuvent passer d'un environnement de dev à prod sans avoir à être regénéré
    PhpMyObject teck leader
    http://pmo.developpez.com

    La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure.

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

Discussions similaires

  1. Bug avec le test de profondeur
    Par Tellmarch dans le forum OpenGL
    Réponses: 1
    Dernier message: 17/10/2004, 00h59
  2. Bug avec requete
    Par arsgunner dans le forum ASP
    Réponses: 8
    Dernier message: 14/06/2004, 16h25
  3. [C#] Bug (?) avec la propriété TransparencyKey de la Form
    Par FrigoAcide dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/05/2004, 14h14
  4. [CR9] Bug avec les champs à valeur vide ?
    Par Djob dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 15/07/2003, 21h21

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