Bonjour à tous,
je me suis lancé dans la grande aventure de symfony2 depuis peu
Mais j'ai un problème avec le module fosuser
J'ai une classe Client qui contient un champ Utilisateur, qui extend la classe BaseUser de fosuser. Je comprends à peu près toute la logique, le formulaire s'affiche bien comme je veux.
Mais lorsque je valide un formulaire pour créer un nouvel enregistrement j'obtiens cette erreur...
Si je remplis 'manuellement' ce champ j'obtiens une erreur similaire avec l'adresse mail...SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'password' cannot be null
On dirait que je ne passe pas du tout par les fonctions de fosuser...
Cependant, si je crée un nouvel utilisateur en passant par le formulaire propre de ma classe Utilisateur (et donc pas le formulaire imbriqué) l'utilisateur se crée sans problème (mais en db les champs algorithm et confirmation_token sont vides)
...
Auriez vous une idée? je commence à désespérer ^^
Merci d'avance.
voici mon code:
Utilisateur.php
Client.php
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 <?php namespace lhn\backendBundle\Entity; use FOS\UserBundle\Entity\User as BaseUser; use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\Entity */ class Utilisateur extends BaseUser { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\generatedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(name="deleted_at", type="datetime", nullable="true") * @Assert\Null */ private $deleted_at; public function __construct() { parent::__construct(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set deleted_at * * @param datetime $deletedAt */ public function setDeletedAt($deletedAt) { $this->deleted_at = $deletedAt; } /** * Get deleted_at * * @return datetime */ public function getDeletedAt() { return $this->deleted_at; } }
ClientController.php
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
26
27
28 <?php namespace lhn\backendBundle\Entity; use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * lhn\backendBundle\Entity\Client * * @ORM\Table() * @ORM\Entity */ class Client { /** * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\OneToOne(targetEntity="Utilisateur", cascade={"persist"}) */ protected $utilisateur; (...)
ClientType.php
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 <?php namespace lhn\backendBundle\Controller; use lhn\backendBundle\Entity\Utilisateur; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use lhn\backendBundle\Entity\Client; use lhn\backendBundle\Form\ClientType; /** * Client controller. * * @Route("/client") */ class ClientController extends Controller { /** * Displays a form to create a new Client entity. * * @Route("/new", name="client_new") * @Template() */ public function newAction() { $entity = new Client(); $form = $this->createForm(new ClientType(), $entity); return array( 'entity' => $entity, 'form' => $form->createView() ); } /** * Creates a new Client entity. * * @Route("/create", name="client_create") * @Method("post") * @Template("lhnbackendBundle:Client:new.html.twig") */ public function createAction() { $entity = new Client(); $request = $this->getRequest(); $form = $this->createForm(new ClientType(), $entity); $form->bindRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); $em->persist($entity); $em->flush(); return $this->redirect($this->generateUrl('client_show', array('id' => $entity->getId()))); } return array( 'entity' => $entity, 'form' => $form->createView() ); } (...) }
UtilisateurType.php
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 <?php namespace lhn\backendBundle\Form; use lhn\backendBundle\Entity\Utilisateur; use FOS\UserBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; class ClientType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder (...) ->add('utilisateur', new UtilisateurType()) (...) ; } public function getName() { return 'lhn_backendbundle_clienttype'; } }
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
26
27 <?php namespace lhn\backendBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; class UtilisateurType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder ->add('username') ->add('email', 'email') ->add('plainPassword', 'repeated', array('type' => 'password')) ; } public function getDefaultOptions(array $options) { return array( 'data_class' => 'lhn\backendBundle\Entity\Utilisateur', ); } public function getName() { return 'UtilisateurType'; } }
Partager