Form Builder - Formulaires Dynamiques

Vue d'ensemble


Le système de Form Builder permet de créer et gérer des formulaires dynamiques pour les utilisateurs/adhérents. Tous les champs sont configurables via l'interface d'administration.

Accès à la configuration : Gestion → Form Builder → User

Types de formulaires


Formulaire Inscription

Utilisé pour l'inscription des nouveaux utilisateurs. Champs de base requis pour créer un compte.

  • Civilité, Nom, Prénom
  • Email, Adresse, Code postal, Ville
  • Date de naissance
  • Mot de passe
Formulaire Adhérent

Utilisé par les administrateurs pour créer/modifier des adhérents. Inclut des champs supplémentaires.

  • Tous les champs d'inscription
  • + Rôles personnalisés
  • + Statut, Grade, Fonction
  • + Photo

Fonctionnalités


Gestion des champs
  • Ordre : Réorganisez les champs par glisser-déposer
  • Fieldsets : Regroupez les champs par sections (ex: "Informations personnelles", "Coordonnées")
  • Colonnes : Affichez les champs sur 1 ou 2 colonnes
  • Visibilité : Activez/désactivez les champs
  • Obligatoire : Définissez les champs requis
  • Label personnalisé : Modifiez les libellés (pour certains champs)
  • Placeholder : Ajoutez un texte d'aide
  • Classes CSS : Personnalisez l'apparence
Types de champs supportés
  • text : Texte simple
  • email : Email
  • password : Mot de passe
  • date : Date
  • tel : Téléphone
  • textarea : Texte long
  • choice : Liste déroulante
  • checkbox : Case à cocher
  • file : Upload de fichier
  • number : Nombre

Configuration


1. Accéder à l'interface

Allez dans Gestion → Form Builder → User

2. Choisir le type de formulaire

Sélectionnez "Formulaire Inscription" ou "Formulaire Adhérent" dans le menu

3. Configurer les champs
  • Glissez-déposez pour réorganiser
  • Cliquez sur un champ pour l'éditer
  • Modifiez le label, placeholder, etc.
  • Cochez/décochez "Actif" et "Obligatoire"
4. Organiser en fieldsets

Assignez un nom de fieldset pour regrouper les champs (ex: "Identité", "Coordonnées", "Association")

5. Sauvegarder

Cliquez sur "Enregistrer" pour appliquer les changements

Initialisation


Pour initialiser ou réinitialiser les formulaires :

Initialiser (première fois)
php bin/console app:user-form:init
Réinitialiser (supprimer et recréer)
php bin/console app:user-form:init --drop
Attention : L'option --drop supprime toutes vos personnalisations. À utiliser avec précaution !

Champs protégés


Certains champs sont non supprimables car essentiels au fonctionnement :

  • email : Identifiant de connexion
  • nom, prenom : Identité
  • plainPassword : Mot de passe (inscription uniquement)

Ces champs peuvent être désactivés mais pas supprimés.

Personnalisation avancée


Ajouter un champ personnalisé

Vous pouvez ajouter des champs avec le préfixe custom_ qui ne seront pas mappés à l'entité User :

  • custom_newsletter : Checkbox pour newsletter
  • custom_commentaire : Zone de texte libre
  • custom_motivation : Motivation d'adhésion
Modifier les options d'un dropdown

Pour les champs de type choice (Région, Grade, Fonction), éditez directement les options dans la configuration du champ.

Template d'affichage


Le template templates/user/_form.html.twig gère l'affichage dynamique :

  • Fieldsets avec titres
  • Affichage en 1 ou 2 colonnes
  • Classes Bootstrap automatiques
  • Textes d'aide et placeholders
Avantage : Tous les changements sont immédiats et visibles sans modifier le code !

Utilisation dans le code


Dans un contrôleur
use App\Form\FormBuilder\DynamicUserFormType;
use App\Services\FormBuilder\UserFormBuilderService;

public function register(
    Request $request,
    UserFormBuilderService $formBuilderService
): Response {
    $user = new User();
    
    $form = $this->createForm(DynamicUserFormType::class, $user, [
        'form_type' => 'registration' // ou 'adherent'
    ]);
    
    // ... gestion du formulaire ...
    
    return $this->render('registration/register.html.twig', [
        'registrationForm' => $form,
        'form_fields' => $formBuilderService->loadUserFormConfig('registration'),
        'form_config' => $formBuilderService->getFormConfiguration('registration'),
    ]);
}
Dans un template Twig
{% include 'user/_form.html.twig' with {
    'form': registrationForm,
    'button_label': 'Créer mon compte',
    'form_fields': form_fields,
    'form_config': form_config
} %}