src/Controller/UserController.php line 41

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\UserType;
  5. use App\Repository\UserRepository;
  6. use App\Repository\UserProjetsRepository;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\String\Slugger\SluggerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  13. #[Route('/users')]
  14. class UserController extends AbstractController
  15. {
  16.     #[Route('/new'name'app_user_new'methods: ['GET''POST'])]
  17.     public function new(Request $requestUserRepository $userRepository): Response
  18.     {
  19.         $user = new User();
  20.         $form $this->createForm(UserType::class, $user);
  21.         $form->handleRequest($request);
  22.         if ($form->isSubmitted() && $form->isValid()) {
  23.             $userRepository->save($usertrue);
  24.             return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  25.         }
  26.         return $this->renderForm('user/new.html.twig', [
  27.             'user' => $user,
  28.             'form' => $form,
  29.         ]);
  30.     }
  31.     #[Route('/{id}'name'app_user_show'methods: ['GET'])]
  32.     public function show(User $userUserProjetsRepository $userProjetsRepository): Response
  33.     {
  34.         return $this->render('user/show.html.twig', [
  35.             'user' => $user,
  36.             'projects' => $user->getUserProjets()->getValues(),
  37.             'comments' => $user->getCommentaires()->getValues(),
  38.         ]);
  39.     }
  40.     #[Route('/{id}/edit'name'app_user_edit'methods: ['GET''POST'])]
  41.     public function edit(Request $requestUser $userUserRepository $userRepositorySluggerInterface $slugger): Response
  42.     {
  43.         if ($user->getId() !== $this->getUser()->getId() && !$this->isGranted('ROLE_ADMIN')) {
  44.             throw $this->createAccessDeniedException('Vous n\'avez pas le droit de modifier cet utilisateur');
  45.         }
  46.         $form $this->createForm(UserType::class, $user, [
  47.             'isAdmin' => $this->isGranted('ROLE_ADMIN') ? true false,
  48.         ]);
  49.         $form->handleRequest($request);
  50.         if ($form->isSubmitted() && $form->isValid()) {
  51.             // dd($form->get('image')->getData());
  52.             $imageFile $form->get('image')->getData();
  53.             if ($imageFile) {
  54.                 $originalFilename pathinfo($imageFile->getClientOriginalName(), PATHINFO_FILENAME);
  55.                 $safeFilename $slugger->slug($originalFilename);
  56.                 $newFilename $safeFilename '-' uniqid() . '.' $imageFile->guessExtension();
  57.                 try {
  58.                     $imageFile->move(
  59.                         $this->getParameter('images_directory'), // définir ce paramètre dans votre fichier de configuration services.yaml
  60.                         $newFilename
  61.                     );
  62.                 } catch (FileException $e) {
  63.                     // gérer l'exception si quelque chose se passe mal pendant l'upload du fichier
  64.                 }
  65.                 $user->getUserInfos()->setImage($newFilename);
  66.             }
  67.             $userRepository->save($usertrue);
  68.             return $this->redirectToRoute('app_user_show', ['id' => $user->getId()], Response::HTTP_SEE_OTHER);
  69.         }
  70.         return $this->render('user/edit.html.twig', [
  71.             'user' => $user,
  72.             'form' => $form,
  73.         ]);
  74.     }
  75.     #[Route('/{id}'name'app_user_delete'methods: ['POST'])]
  76.     public function delete(Request $requestUser $userUserRepository $userRepository): Response
  77.     {
  78.         if ($this->isCsrfTokenValid('delete' $user->getId(), $request->request->get('_token'))) {
  79.             $userRepository->remove($usertrue);
  80.         }
  81.         return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
  82.     }
  83. }