Bonjour,

je suis entrain de développer un site avec synfony 4.3 et j'ai un problème avec le formulaire qui permet de mettre à jour le profil d'un utilisateur.

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
<?php
 
namespace App\Form;
 
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use App\Form\AvatarType;
 
 
class UserInfoType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
      $builder
      ->add('username', TextType::class)
      ->add('signature', TextareaType::class, ['required' => False, 'empty_data' => ""])
      ->add('city', TextType::class, ['required' => False, 'empty_data' => ""])
      ->add('avatar', AvatarType::class, [
        'label' => false
      ])
 
       ->add('age', NumberType::class)
 
      ->add('save', SubmitType::class, ['label' => 'Mettre à jour'])
     ;
    }
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
        ]);
    }
}
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
namespace App\Entity;
 
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
use App\Entity\Avatar;
 
/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @ORM\Table(name="user")
 * @UniqueEntity(fields="email", message="Cette adresse e-mail est déjà utilisée.")
 * @UniqueEntity(fields="username", message="Ce pseudo est déjà utilisé.")
 */
 
class User implements UserInterface
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;
 
    /**
     * @var string
     *
     * @ORM\Column(type="string", unique=true)
     * @Assert\NotBlank()
     */
    private $username;
 
    /**
    * @var string
    *
    * @ORM\Column(type="string", unique=true)
    * @Assert\NotBlank()
    * @Assert\Email()
    */
 
    private $email;
 
    /**
     * @ORM\Column(type="string", length=255)
     */
    private $password;
 
    /**
     * @ORM\Column(type="array")
     */
    private $roles = [];
 
 
    /**
     * @ORM\Column(type="integer")
     */
    private $status;
(Mon entité USER n'est pas entière ici , je ne pense pas que c'est pertinent )
et voici mon contrôleur.

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
/**
   * @Route("/user/edit", name="display_myself_edit")
   */
 
  public function UserMySelfEdit(Request $request)
  {
    $user = $this->getUser();
    $form = $this->createForm(UserInfoType::class, $user);
    $form->handleRequest($request);
 
    if ($form->isSubmitted()) {
      if ($form->isValid()){
 
        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();
      }
    return $this->redirectToRoute('display_logged');
  }
 
      $paths = array(array('name' => $user->getUsername(), 'link' => $this->generateUrl('display_himself', ['name' => $user->getUsername()])),
      array('name' => 'modification', 'link' => $this->generateUrl('display_myself_edit') ));
    return $this->render(
      'User/edit.html.twig', array('form' => $form->createView(), 'user' => $user, 'paths' => $paths));
  }


Ca fonctionne sauf quand je rename via le formulaire mon utilisateur connecté avec un nom déjà pris par l'utilisateur.

Je suis logout directement. le firewall symfony deconnecte l'utilisateur. Je n'arrive pas à catcher cette erreur.

Pouvez vous m'aider ? merci d'avance