bon j'ai modifié mon entité User comme cela
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity(
* fields = {"username"},
* message = "Ce pseudo est déjà utilisé!"
* )
* @UniqueEntity(
* fields= {"email"},
* message= "Cet email es déjà utilisé!",
* )
*/
class User implements UserInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Assert\Email(
* message = "Veuillez renseigner une adresse email valide!"
* )
*/
private $email;
/**
* @ORM\Column(type="string", length=255)
* @Assert\Length(min="5", minMessage="Mot de passe trop court! (Minimum 5 caractères)")
*/
private $username;
/**
* @ORM\Column(type="string", length=255)
* @Assert\Length(min="8", minMessage="Mot de passe trop court! (Minimum 8 caractères)")
*/
private $password;
/**
* @Assert\EqualTo(propertyPath="password", message="Les deux mots de passe ne sont pas identiques!")
*/
public $confirm_password;
/**
* @ORM\Column(type="string", length=255)
*/
private $sexe;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Description", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $description;
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getSexe(): ?string
{
return $this->sexe;
}
public function setSexe(string $sexe): self
{
$this->sexe = $sexe;
return $this;
}
public function eraseCredentials()
{
}
public function getSalt()
{
}
public function getRoles()
{
return ['ROLE_USER'];
}
public function getDescription(): ?Description
{
return $this->description;
}
public function setDescription(Description $description): self
{
$this->description = $description;
return $this;
}
}
et mon SecurityController comme ceci:
public function registration(Request $request, ObjectManager $manager, UserPasswordEncoderInterface $encoder) {
$user = new User();
$description = new Description();
$form = $this->createForm(RegistrationType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$description->setYeuxLui('Bleus');
$hash = $encoder->encodePassword($user, $user->getPassword());
$user->setPassword($hash);
$user->setDescription($description);
$manager->persist($description);
$manager->persist($user);
$manager->flush();
return $this->redirectToRoute('security_login');
}
return $this->render('security/registration.html.twig', [
'form' => $form->createView()
]);
}
je me suis basé sur la doc de symfony ici:
https://symfony.com/doc/current/doctrine/associations.html
mais à la soumission de mon formulaire je rencontre l'erreur suivante:
An exception occurred while executing 'INSERT INTO description (user_id, naissance_lui, naissance_elle, yeux_lui, yeux_elle, cheveux_lui, cheveux_elle, taille_lui, taille_elle, poids_lui, poids_elle, silhouette_lui, silhouette_elle, profession_lui, profession_elle, fumeur_lui, fumeur_elle, origine_lui, origine_elle, sexualite_lui, sexualite_elle, statut, enfant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [null, null, null, "Bleus", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'user_id' ne peut être vide (null)