Thanks for the information, I will try to figure it out for more. Keep sharing such informative post keep suggesting such post.
Bonjour,
Je cherche à gérer une page de profil utilisateur. derrière cette page se trouve notamment 2 entités reliées avec une relation ManyToOne (User - ManyToOne - Address)
L'objectif est de pouvoir afficher dans un formulaire, en plus des autres infos de l'utilisateur, l'adresse complète (en 3 champs séparés de la table Address les paramètres "way, "pc", "city") si elle à déjà été renseignée ou donner la possibilité à l'utilisateur connecter de renseigner ces 3 champs.
Mon formulaire
`
class EditProfileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, ['label' => 'Nom: ', 'required' => false])
->add('address', EntityType::class, [
'label' => 'Adresse: ',
'class' => Address::class,
'required' => false
])
//... + d'autres champs
// ne fonctionne pas
// ->add('address', TextType::class, [
// 'label' => 'Adresse: ',
// 'required' => false
// ])
// ->add('address', TextType::class, [
// 'label' => 'CP: ',
// 'required' => false
// ])
// ->add('address', TextType::class, [
// 'label' => 'Ville: ',
// 'required' => false
// ]);
->add('Save', SubmitType::class, ["label" => 'Enregistrer!']);
}
}
Dans UserController
class UserController extends AbstractController
{
/**
* @Route("/edit-profile/{id}", name="app_profile", requirements={"id": "\d+"}, methods={"GET", "POST"})
*/
public function editProfile($id,EntityManagerInterface $em, Request $request, SluggerInterface $slugger)
{
//Recuperation de l'instance de repository
$userRepo = $this->getDoctrine()->getRepository(User::class);
$user= $userRepo->find($id);
// $genderRepo = $this->getDoctrine()->getRepository(Gender::class);
// $gender= $genderRepo->find($id);
$addressRepo = $this->getDoctrine()->getRepository(Gender::class);
$address= $addressRepo->find($id);
//----- creation du Formulaire
//on crée une instance de la classe Form à partir de la classe User avec les données de $user
$editProfileForm = $this->createForm(EditProfileType::class, $user);
$editProfileForm->handleRequest($request);
//----- Verification soumission et validité du formulaire
if ($editProfileForm->isSubmitted()&& $editProfileForm->isValid())
{
$em->persist($user);
$em->flush();
//Ajout du message flash
$this->addFlash('success', 'Profil enregistré!');
return $this->redirectToRoute('general');
}
//redirection vers la vue "profile"
return $this->render('user/profile.html.twig', [
'user' => $user,
'address' => $address,
'editProfileForm' => $editProfileForm ->createView(),
]);
}
}
Dans User
class User implements UserInterface, \Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface
{
/**
- @ORM\Id
- @ORM\GeneratedValue
-
@ORM\Column(type="integer")
*/
private $id;/**
-
@ORM\Column(type="string", length=255, nullable=true)
*/
private $img;/**
- @ORM\Column(type="string", length=120, nullable=true)
*/
private $name;
// ... d'autres variables
/**
* @ORM\ManyToOne(targetEntity=Address::class)
*/
private $address;
public function __construct()
{
$this->article = new ArrayCollection();
$this->comment = new ArrayCollection();
$this->address = new ArrayCollection();// test
$this->admin = false;
}
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 getAddress(): ?Address
{
return $this->address;
}
public function setAddress(?Address $address): self
{
$this->address = $address;
return $this;
}
}
Dans Address
class Address
{
/**
- @ORM\Id
- @ORM\GeneratedValue
-
@ORM\Column(type="integer")
*/
private $id;/**
-
@ORM\Column(type="string", length=250, nullable=true)
*/
private $way;/**
-
@ORM\Column(type="string", length=10, nullable=true)
*/
private $pc;/**
-
@ORM\Column(type="string", length=30, nullable=true)
*/
private $city;public function getId(): ?int
{
return $this->id;
}public function getWay(): ?string
{
return $this->way;
}public function setWay(?string $way): self
{
$this->way = $way;return $this;}
public function getPc(): ?string
{
return $this->pc;
}public function setPc(?string $pc): self
{
$this->pc = $pc;return $this;}
public function getCity(): ?string
{
return $this->city;
}public function setCity(?string $city): self
{
$this->city = $city;return $this;}
}`
Dans mon twig
`
{% block body %}
<h2>Profil</h2>
<div>
{{ form_start(editProfileForm) }}
{{ form_row(editProfileForm.name) }}
{{ form_row(editProfileForm.address) }}
{{ form_end(editProfileForm) }}
</div>
{% endblock %}
`
Ce que je veux
je cherche à afficher 3 champs de texte pour pouvoir enregistrer l'adresse de l'utilisateur.
Ce que j'obtiens
J'obtiens l'erreur suivante:
Object of class Proxies__CG__\App\Entity\Address could not be converted to string
4 réponses
Bonjour, c'est difficile de lire ton code met le dans les bonnes balises...
Tu obtiens cette erreure car tu essaye d'afficher l'objet Adress.
Ajoute : 'choice_label' => 'name',
dans ton EditProfileType
->add('address', EntityType::class, [ 'label' => 'Adresse: ', 'class' => Address::class, 'required' => false, 'choice_label' => 'name', ])
Bonjour,
J'ai réussi à trouver une solutionn avec :
$address= $addressForm->getNormData();
Excellent web site. A lot of useful information here. I’m sending it to a few pals and also sharing in delicious. And of course, thank you to your effort! Crediblebh