Bonjour,
je travaille actuellement avec Symfony 3 et FOSUserBundle. Je souhaite que les utilisateurs puissent s’inscrire seulement avec l’adresse e-mail, le pseudo est optionel et le mot de passe sera généré du côté serveur.
Pour ce qui est de la surcharge de l’entité User, il n’y a pas de soucis j’ai correctement modifiés les paramètres avec doctrine en ajoutant ces annotations avant la définition de la classe :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /** * User * * @ORM\Table(name="user") * @ORM\Entity(repositoryClass="PP\UserBundle\Repository\UserRepository") * * @ORM\AttributeOverrides({ * @ORM\AttributeOverride( * name="username", * column=@ORM\Column( * length=50, * nullable=true * ) * ), * @ORM\AttributeOverride( * name="usernameCanonical", * column=@ORM\Column( * nullable=true * ) * ) * }) */ |
J’ai ré-écrit le formulaire d’inscription :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | namespace PP\UserBundle\Form; use FOS\UserBundle\Util\LegacyFormHelper; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; class RegistrationType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('username', null) ->add('email', LegacyFormHelper::getType('Symfony\Component\Form\Extension\Core\Type\EmailType')); } public function getBlockPrefix() { return 'pp_user_registration'; } } |
J’ai définit le formulaire en tant que service :
1 2 3 4 5 6 7 8 9 10 11 12 | services: _defaults: autowire: true autoconfigure: true public: false pp.form.registration: class: PP\UserBundle\Form\RegistrationType tags: - name: form.type alias: pp_user_registration |
J’ai mis à jour la configuration de FOSUserBundle :
1 2 3 4 5 6 7 8 9 10 | fos_user: db_driver: orm firewall_name: main user_class: PP\UserBundle\Entity\User from_email: address: '%mailer_user%' sender_name: '%mailer_user%' registration: form: type: PP\UserBundle\Form\RegistrationType |
Pour le moment, je ne cherche pas à faire de validation, mais seulement comprendre comment insérer les données avec une entitée User modifiée. J’ai alors commenté toutes les contraintes de propriété pour l’inscription dans vendor/friendsofsymfony/user-bundle/Resources/config/validation.xml. Symfony ne fait donc aucune vérification des contraintes après la soumission du formulaire, celui-ci est toujours valide.
Dans mon formulaire, l’utilisateur peut saisir un pseudo s’il le souhaite ou laisser vide s’il n’en veux pas. Seulement voilà, les données ne sont pas récupérées, en effet après la soumission du formulaire j’ai tous les champs à NULL même lorsque j’entre un pseudo :
1 2 3 | An exception occurred while executing 'INSERT INTO user (username, username_canonical, email, email_canonical, enabled, salt, password, last_login, confirmation_token, password_requested_at, roles) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [null, null, null, null, 1, null, null, null, null, null, "a:0:{}"]: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'email' cannot be null |
Je ne comprends pas le problème. Quelqu’un pourrais t-il m’aider ? Merci