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?