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 :

Commet lié une classe du modèle avec myUser.class


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut Commet lié une classe du modèle avec myUser.class
    Salut,

    voici ma question : je cherche comment lié une classe du modèle (lib/model) avec le myUser (apps/frontend/lib/).

    En effet mes utilisateurs sont stockés en base et j'aimerais que dans mes actions, la méthode $this->getUser() me renvoit un objet Utilisateur. Pour l'instant j'utilise un "coupd'gruge" :

    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
     
    class myUser{
       function connection($login,$password){
         $this->setParameter('user') = UserPeer::getUser($login,$password);
       }
     
       function getUserBase(){
          return $this->getParameter('user');
       }
     
    dans mon action.class
     
    function executeIndex(){
      $login = $this->getUser()->getUserBase()->getLogin();
    }
    c'est un peu moche quand même....

    si quelqun a une idée, merci

  2. #2
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Bonjour,

    J'avoue que c'est un peu spécial comme situation mais je te conseillerai de ne pas le faire.

    En effet, la classe myUser correspond aux sessions en php. En fait, tu veux mettre un objet en session et donc il faut bien penser aux pertes de performances !

    Peux-tu nous exposer la raison de ce choix pour qu'on puisse t'indiquer la pertinence réelle stp ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 66
    Par défaut
    Le mieux serait d'utilisaer le plugin sfGuardUser qui gère les login des utilisateurs sur un site. http://www.symfony-project.org/plugins/sfGuardPlugin.
    Si tu prends la liste compléte des plugin tu t'apercevras que ce plugin est très populaire, ce n'est pas un hasard.

    Sinon pour répondre à ta question le mieux serait que plutot que de stocker ton objet de stocké uniquement son ID. Ensuite tu fais une méthode qui intancie ton objet. Par contre je suis désolé mais je n'utilise plus Propel depuis 1 an je te mettrais simplement un exemple Doctrine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class MyUser
    {
      public function signin(UserClass $user)
      {
        $this->setAttribute(user_id, $user->getId(), 'myUserBaseNameSpace');
      }
     
      public function getUserBase()
      {
        return Doctrine_Core::getTable('User')->find($this->getAttribute('user_id', null, 'myUserBaseNameSpace'));
      }
    }
    C'est du code très simplifié mais c'est l'idée générale et il est certain que tu auras de meilleure performance en ne stockant pas un objet dans ta session.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut
    Merci des vos réponses


    Mon but serait d'avoir l'utilisateur courant avec toutes ses infos (login & autres) sur toutes les pages du site, par exemple si je veux afficher un résumé du profil de l'utilisateur du site sur toutes les pages.

    Au niveau des perfs, je pense pas que d'avoir juste un utilisateur contenant des chianes (login, mdp) et des integer (id et autres), ce soit trop lourd, quel est votre avis ?

    J'ai hésité avec ta solution Muspil mais cela veut dire qu'à chaque fois que j'ai besoin de mon utilisateur je fais une requête en base, est-ce que ce n'est pas plus lourd au final ?


    Je voulais éviter d'utiliser un plugin juste pour ça mais si tout le monde me dit que c'est bien, je vais regarder.


    PS: Muspil pas de problème pour propel, je fais les deux en ce moment

  5. #5
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    A mon avis, il te suffit de charger ces quelques informations dans la session oui.
    Après, il ne faut pas charger tout l'objet dans la session (pb de perfs) mais lors du login, tu peux reprendre ce que propose Muspil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      public function signin(UserClass $user)
      {
        $this->setAttribute(user_id, $user->getId(), 'myUserBaseNameSpace');
        $this->setAttribute(user_login, $user->getlogin(), 'myUserBaseNameSpace');
        $this->setAttribute(user_name, $user->getName(), 'myUserBaseNameSpace');
      }
    Enfin, je pense que tu imagines ce que je veux dire, tu rajoutes un attribut à chaque données que tu veux garder.

Discussions similaires

  1. Créer une instance de modèle avec 2 clefs étrangères
    Par Invité dans le forum Ruby on Rails
    Réponses: 6
    Dernier message: 25/11/2011, 17h42
  2. Réponses: 9
    Dernier message: 24/01/2008, 09h35
  3. Réponses: 7
    Dernier message: 10/12/2007, 09h42
  4. Réponses: 7
    Dernier message: 05/10/2006, 09h07
  5. Réponses: 13
    Dernier message: 02/02/2005, 01h21

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