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

Plugins PHP Discussion :

Lien entre sfGuard et ma classe utilisateur [sfGuard]


Sujet :

Plugins PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Par défaut Lien entre sfGuard et ma classe utilisateur
    Bonjour, c'est mon premier post ici, et j'en profite donc pour remercier tous les auteurs de tutos sf2 et sf1, ainsi qu'aux principaux posteurs sur ce forum où Google m'aura bien souvent envoyé, dev très junior de mon état.

    Paradoxalement je connais Sf2 bien mieux que Sf1, ayant fait mon stage de fin de formation sur le premier. Sauf que dans mon vrai boulot de fraîchement diplômé, je dois bosser sur Sf1 qui m'apparait plus obscur, et, je trouve, moins bien fait.
    Je savais donc que j'allais avoir du mal à faire connaissance, et là j'avoue en perdre mon latin!
    Je n'arrive pas à mettre en place le lien le plus simple qui soit entre sfGuardUser et un sfGuardUserProfile, en utilisant sfDoctrineGuard 5.0 et sf 1.4.15.

    J'ai essayé de m'inspirer de ce vieux tuto, ainsi que de celui-ci, plus récent. Ce dernier semble indiquer que sfGuardUser recherche automatiquement une classe sfGuardUserProfile.

    Je procède donc à partir d'une installation vierge de symfony, étape par étape:

    - generate:project
    - generate: app frontend, puis backend
    - modification du config/ProjectConfiguration.class.php pour activer sfGuard
    - je crée un schema.yml tout basique avec pour seule classe, ma classe sfGuardUserProfile, avec pour alias "Profile":
    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
     
    sfGuardUserProfile:
      columns:
        sf_guard_user_id: integer
        address:           string(255)
        city:             string(255)
        zipcode:          string(5)
      relations:
        User:
          class: sfGuardUser
          local: sf_guard_user_id
          foreign: id
          type: one
          foreignType: one
          foreignAlias: Profile
    - je fais un "symfony doctrine:build --all --and-load --no-confirmation" .
    - j'édite le apps/backend/config/settings.yml avec
    enabled_modules: [default, sfGuardAuth, sfGuardUser]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    all:
      .settings:
        csrf_secret:            9f266c39f229a887ac215d9f76b2b268fcb115fb
        enabled_modules: [default, sfGuardAuth, sfGuardUser]
    - j'édite le apps/backend/config/app.yml avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      sf_guard_plugin:
        profile_class:      sfGuardUserProfile
        profile_field_name: sf_guard_user_id
        routes_register: false
    - je copie/colle mon module sfGuardUser dans apps/backend/modules et j'édite le generator.yml en rajoutant juste l'alias "Profile" aux valeurs par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          form:
            class: sfGuardUserAdminForm
            display:
              "User":                   [first_name, last_name, email_address, username, password, password_again, Profile]
    Et là c'est le drame, j'ai bien accès à l'administration autogénérée, mais dès que je veux créer un utilisateur depuis ma page "/backend_dev.php/sfGuardUser" j'obtiens un magnifique:
    "Widget "Profile" does not exist."
    Pourtant, si je fais un "doctrine:data-load" sur un fixture.yml, les informations sont bien rentrées dans la base sur les deux tables, sfGuardUser et sfGuardUserProfile.:
    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
     
    sfGuardUser:
      User_admin:
        first_name:     John
        last_name:      Doe
        email_address:  john.doe@gmail.com
        username:       admin
        password:       admin
        is_super_admin: true
        Groups:         [Group_admin]
        Profile:
          city:         superville
          zip_code:     code
          address:      super rue
     
    sfGuardGroup:
      Group_admin:
        name:           admin
        description:    Administrator group
        Permissions:    [Permission_admin]
     
    sfGuardPermission:
      Permission_admin:
        name:           admin
        description:    Administrator permission
    Je sèche complètement. J'ai fait et refait toutes ces étapes un grand nombre de fois en pure perte. Aurais-je oublié un truc bête quelque part?

  2. #2
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Bonjour,

    L'erreur qui t'es remontée par le framework c'est que le CRUD généré attend un Widget "Profile".

    Pour moi, tu n'as pas du bien suivre le premier tutoriel !

    Dans ton premier formulaire (UserForm), il faut que tu inclues un widget qui permettra à ton utilisateur de saisir les champs qui permettront de remplir ta table correspondante en base de données.

    Il faut que ton formulaire principal (User) embarque un embedForm (Profile) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    public function configure()
    {
      parent::configure();
     
      $profileForm = new ProfileForm($this->object->Profile);
      unset($profileForm['id'], $profileForm['sf_guard_user_id']);
      $this->embedForm('Profile', $profileForm);
    }
    J'espère t'avoir aidé !

    Mathieu

    PS : J’avoue que le retour en arrière entre sf1 et sf2 doit être vraiment pas être simple pour toi !!!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Par défaut
    Merci beaucoup, ça m'a mis sur la bonne voie, j'ai eu un petit souci après, vu qu'il cherchait un formulaire sur mon alias et non pas ma classe UserProfile elle-même, mais après j'ai enfin eu mon formulaire!
    Comme j'ai découvert le tuto ancien après m'être acharné sur l'autre récent (dont je n'ai pas mis un lien valide, apparemment, mais c'était de l'officiel sur le trac symfony), j'ai été trop peu attentif, ça fait plaisir de voir enfin ce foutu truc après le temps que j'ai perdu dessus!

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

Discussions similaires

  1. Lien entre élément MXML et classes AS3
    Par poooky dans le forum Flex
    Réponses: 9
    Dernier message: 29/07/2009, 12h57
  2. Lien entre deux classe
    Par Bouboukick dans le forum Général Java
    Réponses: 19
    Dernier message: 27/05/2008, 11h09
  3. [DC] Lien entre les classes.
    Par Falcor dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 02/01/2008, 09h37
  4. Réponses: 6
    Dernier message: 02/12/2007, 10h30
  5. Liens entre des classes héritées
    Par qwiqwi dans le forum C++
    Réponses: 12
    Dernier message: 09/02/2006, 15h36

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