Modifier un Form et le controller - david-alpha/gdn GitHub Wiki
nom
et prenom
🧾 Formulaire d'inscription Symfony — Ajout des champs Ce fichier montre la version modifiée de RegistrationForm.php
avec les champs nom et prénom ajoutés au formulaire d'inscription.
<?php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
class RegistrationForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('email')
->add('nom', TextType::class, [
'label' => 'Nom',
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir votre nom',
]),
],
])
->add('prenom', TextType::class, [
'label' => 'Prénom',
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir votre prénom',
]),
],
])
->add('agreeTerms', CheckboxType::class, [
'mapped' => false,
'constraints' => [
new IsTrue([
'message' => 'Vous devez accepter les conditions.',
]),
],
])
->add('plainPassword', PasswordType::class, [
'label' => 'Mot de passe',
'mapped' => false,
'attr' => ['autocomplete' => 'new-password'],
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir un mot de passe',
]),
new Length([
'min' => 6,
'minMessage' => 'Le mot de passe doit contenir au moins {{ limit }} caractères',
'max' => 4096,
]),
],
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
✅ Ce formulaire est désormais prêt à être utilisé dans votre contrôleur d'inscription.
ROLE_USER
et activation
✅ Contrôleur Symfony : Inscription avec nom, prénom, rôle Voici une version complète et à jour du contrôleur RegistrationController.php
, incluant :
- L’insertion automatique des champs
nom
etprenom
- L’activation du compte (
isActif = true
) - L’attribution du rôle
ROLE_USER
à l'inscription
<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\RegistrationForm;
use App\Security\Authenticator;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Attribute\Route;
class RegistrationController extends AbstractController
{
#[Route('/register', name: 'app_register')]
public function register(
Request $request,
UserPasswordHasherInterface $userPasswordHasher,
Security $security,
EntityManagerInterface $entityManager
): Response {
$user = new User();
$form = $this->createForm(RegistrationForm::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/** @var string $plainPassword */
$plainPassword = $form->get('plainPassword')->getData();
// Encodage du mot de passe
$user->setPassword(
$userPasswordHasher->hashPassword($user, $plainPassword)
);
// Définir les données par défaut
$user->setIsActif(true);
$user->setRoles(['ROLE_USER']);
$entityManager->persist($user);
$entityManager->flush();
// Connexion automatique après inscription
return $security->login($user, Authenticator::class, 'main');
}
return $this->render('registration/register.html.twig', [
'registrationForm' => $form,
]);
}
}