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

Symfony PHP Discussion :

surcharger la methode get


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut surcharger la methode get
    Bonjour tous le monde,

    voila mon probleme, j'ai une class user.class.php qui herite de la classe baseuser.class.php.

    quand j'essai de surcharger la methode getFullname() dans user.class.php il me donne une erreur
    voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function  getFullname() {
            parent::getFullname();
        }
    Merci pour votre aide

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Quelle est l'erreur exacte ?

    Même si ça ne risque pas d'être la réponse au problème : il manque le "return" dans ta méthode.

  3. #3
    Membre averti
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    oui meme si j ajoute le return

    voila l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Maximum function nesting level of '100' reached, aborting! in /home/www/symfony/lib/model/doctrine/user.class.php on line 16

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Il faudrait que je vois exactement le code de la méthode parente, mais l'erreur est que :
    - tu appelles parent::getFullname();
    - si la méthode parent::getFullname() est abstraite (ou dans d'autres cas aussi), elle délèguera son appel à la classe enfant -- ce qui est ton cas ;
    - la méthode de la classe enfant est appelée (la tienne) et l'instruction est : parent::getFullname() ;
    - etc.
    - etc., sans fin

    D'où ton message d'erreur : au bout de 100 boucles, le moteur PHP reconnaît que tu as une boucle infinie et stoppe le processus. Tu appelles la méthode parente, qui elle-même délègue à la méthode de la classe enfant, qui appelle la méthode parente ..., ...

    Donc, je ne sais pas ce que tu veux faire, mais remplace ce parent::getFullname() par le retour que tu veux. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public function  getFullname() {
            return $this->fullname;
        }
     
    // ps : attention aux respects de l'indentation et des normes de codage
    // sinon ton code va vite devenir illisible

  5. #5
    Membre averti
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Merci bilbonec pour ton aide,

    j'ai aussi essayer avec $this->fullname est ça marche pas il me donne une cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Notice: Undefined property: user::$fullname in /home/www/symfony/lib/model/doctrine/user.class.php on line
    pour la classe parent c'est la classe générer par symfony (abstract class Baseuser extends sfDoctrineRecord)

    et encore merci

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Je n'ai pas de quoi tester là, mais c'est quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->_fullname; // si le champ est protected
    // OU :
    $this['fullname'];
    Je me mélange parfois, si quelqu'un pouvait me corriger ?

  7. #7
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    Le grand avantage de declarer abstract ses méthodes c'est que le message d'erreur est plus parlant si on appelle une méthode abstraite.

    Je connais pas symphonie mais un var_dump($this) démèle la situation à tout les coups.

  8. #8
    Membre averti
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Aver un var_dump($this) voia le resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    object(user)[128]
      protected '_node' => null
      protected '_id' => 
        array
          'id' => string '1' (length=1)
      protected '_data' => 
        array
          'id' => string '1' (length=1)
          'fullname' => string 'mon nom' (length=17)
          'email' => string 'email@gmail.com' (length=23)
          'password' => string 'e10adc3996245abbe56e057f20f883e' (length=32)
          'created_at' => string '2010-10-04 19:07:52' (length=19)
          'updated_at' => string '2010-10-14 16:38:39' (length=19)

  9. #9
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    ben je suppose que tu comprends tout seul qu'il n'y a ni
    self::_fulname ni $this['fullname'] à l'exception notable d'une implementation de l'interface ArrayAcces, ou d'un __get() maison. Moi je connais toujours pas symphony.

    ceci dit maintenant __get() ou pas je tenterai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_data['fullname']
    mais bon, tu l'avais deviné

  10. #10
    Membre averti
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Merci bcp a vous tous

  11. #11
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    La solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function  getFullname() {
            $fullname = parent::__get('Fullname');
            // transformations
            return $fullname;
        }

  12. #12
    Membre averti
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Rotta ça marche pas :S

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Il faut que tu mettes l'erreur en clair. Un "ça marche pas", ça aide pas beaucoup pour débugger.

    Sinon, c'est peut-être juste qu'il lui manque la minuscule en début de champ ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function getFullname()
    {
      return parent::__get('fullname');
    }

  14. #14
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    La méthode __get est définie dans une classe Doctrine, Doctrine_Access.

    Le paramètre doit être le nom d'un champ de la table.

    Le retour est le champ, le type de donnée dépendant du type de champ.

  15. #15
    Membre averti
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Bonjour,

    voila l erreur pour __get()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Fatal error: Maximum function nesting level of '100' reached, aborting! in /opt/www/Symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Configurable.php on line

  16. #16
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    C'est une fonction que j'ai déjà utilisé régulièrement.

    Peux-tu mettre la version actuel de ton objet du modèle ?

  17. #17
    Membre averti
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Bonjour Rotta,

    j'ai pas bien compris ta questions

    Merci

  18. #18
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu cherches à modifier un objet doctrine, localisé dans lib/model/doctrine/... c'est ce que l'on appel un objet du modèle.

    Pourrais-tu en mettre le code que j'essaye de comprendre pourquoi quelque chose qui a toujours marché chez moi, ne marche pas chez toi.

  19. #19
    Membre averti
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Bonsoir Rotta voila le code de ma class lib/model/doctrine/user.class.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class user extends Baseuser {
     
        public function getFullname() {
            return parent::__get('Fullname');
        }
    }
    et le code pour baseuser.class.php

    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
    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
     
    abstract class Baseuser extends sfDoctrineRecord
    {
        public function setTableDefinition()
        {
            $this->setTableName('users');
            $this->hasColumn('fullname', 'string', 100, array(
                 'type' => 'string',
                 'length' => 100,
                 ));
            $this->hasColumn('email', 'string', 160, array(
                 'type' => 'string',
                 'length' => 160,
                 ));
            $this->hasColumn('password', 'string', 32, array(
                 'type' => 'string',
                 'length' => 32,
                 ));
            ...
     
            $this->option('collate', 'utf8_general_ci');
            $this->option('charset', 'utf8');
            $this->option('type', 'InnoDB');
        }
     
        public function setUp()
        {
            parent::setUp();
            $this->hasOne('country', array(
                 'local' => 'country_id',
                 'foreign' => 'id',
                 'onDelete' => 'cascade'));
     
            $this->hasMany('visite as visites', array(
                 'local' => 'id',
                 'foreign' => 'user_id'));
     
            $this->hasMany('friend as friends', array(
                 'local' => 'id',
                 'foreign' => 'user_id'));
     
            $this->hasMany('listener as listeners', array(
                 'local' => 'id',
                 'foreign' => 'user_id'));
     
            $timestampable0 = new Doctrine_Template_Timestampable();
            $this->actAs($timestampable0);
        }
    }
    Merci

  20. #20
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Et avec un : parent::__get('fullname') ? Avec un "f" en minuscule...

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/09/2005, 12h17
  2. prob tres simple, form, method get
    Par killy-kun dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 25/08/2005, 10h29
  3. Faire Choix du fichier destination methode GET grace a JS
    Par ahage4x4 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/06/2005, 15h26
  4. la méthode get du Net::telnet
    Par BENCHEKROUN dans le forum Modules
    Réponses: 4
    Dernier message: 25/05/2005, 12h31
  5. probleme avec methode get
    Par Tr@nkill dans le forum ASP
    Réponses: 2
    Dernier message: 12/05/2005, 13h54

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