Bonjour je débute sur le magnifique Symfony et j'ai créer :
1. Entité Users qui récupère via un formulaire l'Email et le mot de passe
2. Entité InfoUser qui récupère récupère via un formulaire le (nom, prenom, adresse, numéro) que j'ai relationné avec l'id de l'entité Users (pour savoir a quel utilisateur appartient ces informations).
Tous fonctionne sauf que je n'arrive pas à récupérer l'id courrant de l'entité Users.
J'ai tanté de faire cela (En étant connecté avec un utilisateur):
merci de ta réponse mais j'ai maintenant cette erreur peut-être que ça n'a rien a voir .. :
A new entity was found through the relationship 'App\Entity\InfoUser#User' that was not configured to cascade persist operations for entity: App\Entity\Users@000000003c76a30900000000686af707. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement 'App\Entity\Users#__toString()' to get a clue.
l'entité Users :
<?php
namespace App\Entity;
use Serializable;
use Doctrine\ORM\Mapping as ORM;
use App\Repository\UsersRepository;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass=UsersRepository::class)
*/
class Users implements UserInterface, \Serializable
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $Name;
/**
* @ORM\Column(type="string", length=255)
*/
private $FirstName;
/**
* @ORM\Column(type="string", length=255)
*/
private $Email;
/**
* @ORM\Column(type="string", length=255)
*/
private $UserName;
/**
* @ORM\Column(type="string", length=255)
*/
private $Password;
/**
* @ORM\OneToMany(targetEntity=InfoUser::class, mappedBy="Users")
*
*/
private $infoUsers;
public function __construct()
{
$this->infoUsers = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->Name;
}
public function setName(string $Name): self
{
$this->Name = $Name;
return $this;
}
public function getFirstName(): ?string
{
return $this->FirstName;
}
public function setFirstName(string $FirstName): self
{
$this->FirstName = $FirstName;
return $this;
}
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 getRoles()
{
return array('ROLE_USER');
}
public function getSalt()
{
return null;
}
public function eraseCredentials(){
}
public function serialize()
{
return serialize(array(
$this->id,
$this->UserName,
$this->Password,
// see section on salt below
// $this->salt,
));
}
/** @see \Serializable::unserialize() */
public function unserialize($serialized)
{
list (
$this->id,
$this->UserName,
$this->Password,
// see section on salt below
// $this->salt
) = unserialize($serialized);
}
/**
* @return Collection|InfoUser[]
*/
public function getInfoUsers(): Collection
{
return $this->infoUsers;
}
public function addInfoUser(InfoUser $infoUser): self
{
if (!$this->infoUsers->contains($infoUser)) {
$this->infoUsers[] = $infoUser;
$infoUser->setUser($this);
}
return $this;
}
public function removeInfoUser(InfoUser $infoUser): self
{
if ($this->infoUsers->removeElement($infoUser)) {
// set the owning side to null (unless already changed)
if ($infoUser->getUser() === $this) {
$infoUser->setUser(null);
}
}
return $this;
}
L'entité InfoUser :
<?php
namespace App\Entity;
use App\Repository\InfoUserRepository;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=InfoUserRepository::class)
*/
class InfoUser
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity=Users::class, inversedBy="infoUser")
*/
private $User;
/**
* @ORM\Column(type="string", length=255)
*/
private $Name;
/**
* @ORM\Column(type="string", length=255)
*/
private $FirstName;
public function getId(): ?int
{
return $this->id;
}
public function getUser(): ?Users
{
return $this->User;
}
public function setUser(?Users $User): self
{
$this->User = $User;
return $this;
}
public function getName(): ?string
{
return $this->Name;
}
public function setName(string $Name): self
{
$this->Name = $Name;
return $this;
}
public function getFirstName(): ?string
{
return $this->FirstName;
}
public function setFirstName(string $FirstName): self
{
$this->FirstName = $FirstName;
return $this;
}
}
le MainController :
<?php
namespace App\Controller;
use Symfony\Component\Security\Core\Security;
use App\Entity\Users;
use App\Entity\InfoUser;
use App\Form\CreatCvType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class MainController extends AbstractController
{
/**
* @Route("/", name="main")
*/
public function index(): Response
{
return $this->render('main/index.html.twig', [
'controller_name' => 'MainController',
]);
}
/**
* @Route("/info", name="info")
*/
public function CreatCv(Request $response, EntityManagerInterface $manager)
{
$user = new Users;
$InfoUser = new InfoUser;
$form = $this->createForm(CreatCvType::class,$InfoUser);
$form->handleRequest($response);
if($form->isSubmitted() && $form->isValid()){
$InfoUser->setUser($user);
$manager->persist($InfoUser);
$manager->flush();
}
return $this->render('main/CreatCV.html.twig', [
'form_cv' => $form->createView(),
]);
}
}
Je comprend bien qu'il faut persister les L'entité mais c'est a mon sens ce que j'ai fait dans le controller ..?
Je pense que cela est dû au fait que tu crée un new user qu'ensuite tu persistes infouser, mais il ne sait pas quoi faire de user qui n'est pas "persisté" ni dans ton controller ni par l'entité infouser.
Tu peux essayer soit de persiter ton user dans le controller, soit de rajouter dans ton entité infouser au niveau de la déclaration de la relation avec user:
Enfin, sans rapport avec le sujet, une remarque en passant=> l'entité Users aurait dû s'appeler User. C'est une convention de nommage qui rend plus clair dans les pluriels les écritures de relation (OneToMany ou MaynyToMany)
C'est normal que user soit null si tu mets user = New Users.
Soit tu t'adresses à l'user en ligne, alors user = $this->getUser(), soit tu veux un user particulier non en ligne auquel cas user = $ur->findOneById($id) où $ur est le repository de Users et $id l'id de l'utiliasteur dont tu souhaites modifier les infos.
comme tu a dis plus haut sympfony va comprendre que c'est l'identifiant que je veux puisqu'il est relationné...
En tout cas merci a toi tu m'a vraiment aidé ...
- Edité par b-init 17 mai 2021 à 17:37:59
Relation et Utilisateur /Symfony
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Site les mathématiques amusantes pour vous détendre
Site les mathématiques amusantes pour vous détendre
Site les mathématiques amusantes pour vous détendre