Un formulaire de création de compte avec Symfony et sfGuard

sfGuard fait parti des plugins Symfony les plus utiles. Il ajoute à notre framework un système de gestion avancé des utilisateurs, groupes et permissions. Il inclut en standard un back office complet ainsi qu’un formulaire de connexion mais pas pour de la création de compte en front.

Symfony

Alors qu’il fût assez fastidieux de le réaliser avec la version 1.0 de Symfony, le nouveau système de création de formulaires introduit dans la version 1.1 nous facilite bien la tache.

Je ne reviendrais pas sur l’installation du plugin qui est très bien détaillée dans sa documentation.

Commençons par générer les formulaires associés à nos tables grâce à Propel : php symfony propel:build-forms. Attaquons-nous maintenant à la classe de notre formulaire d’enregistrement. Créez un fichier nommé sfGuardRegisterForm.class.php dans le répertoire lib/form/ qui contient ce code :

Comme vous pouvez le lire, on se contente de créer une classe qui hérite de sfGuardUserForm fournie avec le plugin et d’y ajouter une validation supplémentaire pour le mot de passe (par défaut il peut être vide). C’est également dans cette méthode configure que se déroulera la validation de vos champs personnalisés sur lesquels nous reviendrons plus bas.

Effacez la cache avec la commande php symfony cc. C’est déjà presque fini !

Créons un répertoire sfGuardAuth dans le répertoire modules de votre application puis deux sous répertoires dans sfGuardAuth nommés actions et templates. Ce pseudo-module nous permettre de surcharger le module sfGuardAuth du plugin afin de lui ajouter une action et une vue qui permettront à vos visiteurs de s’enregistrer sur votre site.

Créez un fichier actions.class.php dans le répertoire actions qui contient :

Quand l’utilisateur est créé on redirige le visiteur vers la page d’accueil et on l’avertit grâce à un attribut flash.

Passons à la vue qui se nommera registerSuccess.php et qui se trouvera dans le répertoire templates :

Très bien, notre formulaire fonctionne. Mais le plus fort arrive !

Vous avez ajouter des champs personnalisés au profil de votre utilisateur dans la table sf_guard_user_profile (cf. la documentation de sfGuard) ? Régénérez les formulaires associés à vos tables avec la commande php symfony propel:build-forms, effacez la cache à grand coup de php symfony cc, rechargez la page /sfGuardAuth/register et admirez : nos champs sont automatiquement reconnus et affichés. Vous pourrez leur ajouter des étapes de validation dans notre première classe sfGuardRegisterForm ou dans sfGuardUserProfileForm si vous voulez qu’elles s’appliquent à tous les formulaires héritant de cette classe (page de modification du profil, ….).

8 Comments

  1. Un formulaire de cration de compte avec Symfony et sfGuard…

    sfGuard fait parti des plugins Symfony les plus utiles. Il ajoute notre framework un systme de gestion avanc des utilisateurs, groupes et permissions. Il inclut en standard un back office complet ainsi quun formulaire de connexion mais pas pour de la …

    Reply

  2. Un formulaire de création de compte avec Symfony et sfGuard…

    sfGuard fait parti des plugins Symfony les plus utiles. Il ajoute à notre framework un système de gestion avancé des utilisateurs, groupes et permissions. Il inclut en standard un back office complet ainsi qu’un formulaire de connexion mais pas pou…

    Reply

  3. Bravo et merci pour ce post éclairant.

    J'ai 2 questions :
    1/ Comment paramétrer la route de ce formulaire dans mon module et importer la class sfGuardAuth ?
    en mettant options: { model: sfGuardAuth, type: object }
    j'ai l'erreur suivante : Class 'sfGuardAuth' not found

    2/ Est-il possible de surcharger également les class form du plugin ?
    J'ai essayé avec sfGuardLoginForm.class.php SANS SUCCES en recopiant/personnalisant le fichier sfGuardLoginForm.class.php dans le répertoire libform . J'ai donc été obligé de travailler dans le répertoire du plugin pluginssfGuardPluginlibform . Modifié le code à l'intérieur d'un plugin sachant que son code est susceptible d'évoluer avec les releases ne me semple pas la bonne solution, il doit y avoir une astuce…

    Reply

  4. J'ai pas réussit à afficher les colones de ma table profil avec cette méthode.
    Une autre solution : dans le configure de votre profilForm.class.php mettre ceci :
    $userForm = new sfGuardUserForm($this->object->getsfGuardUser());
    $this->embedForm('User', $userForm);

    Là ça nous affiche bien les champs de 2 tableq.

    Reply

  5. Tres simple en fait, suffit de surcharger dans le plugin et non au dehors :

    class sfGuardUserForm extends PluginsfGuardUserForm
    {
    public function configure()
    {
    unset(
    $this['algorithm'],
    $this['salt'],
    $this['is_active'],
    $this['is_super_admin'],
    $this['last_login'],
    $this['created_at'] ,
    $this['updated_at']
    );
    }
    }
    Le reste comme dhab..

    Reply

Leave a Reply