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 :

Configuration propre à un utilisateur [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Par défaut Configuration propre à un utilisateur
    Bonjour,

    J'ai un problème qui relève un peu de la gestion des utilisateurs, mais aussi du modèle de données. Je pense que la solution ne doit pas être très difficile.

    Ma situation : une table bookmark et les tables de sfDoctrineGuardUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Bookmark:
      actAs: {TimeStampable: ~ }
      columns:
        user_id:		{type: integer, notnull: true}
        adresse:		{type: varchar(50), notnull: true}
      relations:
        User: { onDelete: CASCADE, local: user_id, foreign: id }
    Maintenant, je veux accéder simplement au bookmark de l'utilisateur connecté.

    Je voulais faire compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $q = Doctrine_Query::create()
      ->from('Bookmark b')
      ->where('user_id = ?' , $this->getUser()->getId());
    Mais ça marche pas.

    Je voulais faire plus simple, et surcharger la classe myUser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public function getBookmark()
      {
    	$x=$this->getAttribute('user_id');
        return $x;
      }
    Mais j'arrive pas à trouver les bons mots pour le faire.

    Est-ce que vous pouvez m'aider?

  2. #2
    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 : 62
    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
    En fait, tu es à deux doigts de la bonne réponse.

    Première chose, as-tu modifié le fichier :
    apps/<application>/lib/myUser.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class myUser extends sfGuardSecurityUser
    {
    }
    Ceci vérifié, pour récupérer l'Id utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $q = Doctrine_Query::create()
      ->from('Bookmark b')
      ->where('user_id = ?' , sfContext::getUser()->getAttribute('user_id'));

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Par défaut
    Nikel, merci beaucoup.

    Ton bout de code ne fonctionnait pas, mais j'ai cherché à partir de ça, et j'ai modifié en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->foo = sfContext::getInstance()->getUser()->getAttribute('user_id',null,'sfGuardSecurityUser');
    la variable foo me retourne l'id de l'utilisateur connecté

    Par contre, j'ai vu que l'utilisation de sfContext n'est pas recommandée. Vous savez pourquoi?

  4. #4
    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 : 62
    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
    Désolé, le code était de mémoire... et avec l'age...

    En fait, c'est parfaitement vrai et totalement faux en même temps.

    D'un point de vue purement logique de séparation des couches est des objet, ta récupération de données n'est pas correcte, en effet, un objet du modèle fait appel directement à une ressource du contrôleur, ce qui n'est pas idéal.

    D'un autre côté, le passage par sfContext est parfaitement bon et c'est celui là qui est utilisé par le contrôleur, donc il n'y a aucun risque à l'utiliser.

    En fait, l'idéal serait de modifier ton code pour ne pas avoir à récupérer l'Id du user dans le modèle, mais de l'envoyer depuis le contrôleur.

    D'ailleurs, une question, où place tu la requête ? J'ai présupposé qu'il était dans un objet du modèle, mais s'il est dans le contrôleur (ce qui n'est pas sa place mais qui marche bien), le code pourrait être allégé.

    Bon, supposant que tu aies ton code dans le modèle, tu vas donc l'avoir dans le fichier lib/model/doctrine/BookmarkTable.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    static public function getAllByUser($user_id)
    {
       return Doctrine_Core::getTable('Bookmark')->findAllByUserId($user_id);
    }
    Et dans le contrôleur (executeXXX)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $bookmarks = BookmarkTable::getAllByUser($this->getUser()->getGuardUser()->getId();
    Code non testé. Pour le getGuardUser(), j'ai relu le readme du plugin.

    Avec ce code tu as un double avantage, tu gardes l'indépendance des couches, le user_id stocké dans le contrôleur y est récupéré et les données sont récupérées par le modèle. Si jamais il fallait modifier la manière de récupérer les données, la récupération est localisée en un seul point. De plus, le code est réutilisable, soit pour récupérer les bookmark de l'utilisateur ailleurs, soit pour récupérer les bookmark de n'importe quel utilisateur.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Par défaut
    Hello,

    Effectivement, il vaut mieux bien séparer les choses. En fait, ce qui me gênait, c'était les méthodes pour accéder aux différents objets. Je ne suis pas encore tout à fait au point sur ça, mais j'ai trouvé une page très bien faite : http://erisds.co.uk/symfony/snippet-...he-user-object

    Il faut bien réfléchir à quand s'exécute la ligne qu'on écrit.

    Cependant, je crois que le sfContext est encore un peu flou : est-ce que cet objet est lié à la session chargée?

    Sinon, pour mon problème de profil utilisateur, j'ai modifié mon modèle : j'avais une relation 1-n entre la Config et l'Utilisateur, en la modifiant à 1-1, c'est plus simple.

  6. #6
    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 : 62
    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
    sfConfig est un objet unique, sans déclaration, qui gère le contexte d'exécution de symfony, il est à l'origine de tous les autres process.

    Effectivement, avec une liaison 1-1, cela devrait être plus simple.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/02/2009, 14h54
  2. Réponses: 0
    Dernier message: 12/12/2008, 09h06
  3. [ASE] Quelle configuration pour x utilisateurs ?
    Par kalistyan dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 12/02/2008, 09h28
  4. Configuration DNS - Multi-utilisateurs
    Par maxattack dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 12/04/2007, 17h33
  5. Sécurité Access, utiliser sa propre table utilisateur
    Par flash2590 dans le forum Sécurité
    Réponses: 2
    Dernier message: 12/12/2005, 16h47

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