<?php namespace App\Controller; use App\Entity\User; use App\Form\EditProfileFormType; use App\Repository\UserRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; /** * Class UserController. */ class UserController extends BaseController { #[Route(path: '/profile/edit/{username}', name: 'app_profile_edit')] public function editProfile(Request $request, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, string $username = ''): Response { if ($username !== '') { if ($this->isGranted(attribute: 'ROLE_ADMIN')) { $user = $userRepository->findOneBy([ 'username' => $username, ]); } else { throw new AccessDeniedException(message: 'Only admins are allowed to edit Profiles.'); } } else { $user = $this->getUser(); } $form = $this->createForm(type: EditProfileFormType::class, data: $user); $form->handleRequest(request: $request); if ($form->isSubmitted() && $form->isValid()) { $user = $form->getData(); // if there's a new password, use it if ($form->get(name: 'newPassword')->getData()) $user->setPassword( password: $userPasswordHasher->hashPassword( user: $user, plainPassword: $form->get(name: 'newPassword')->getData() ) ); $entityManager->persist(entity: $user); $entityManager->flush(); return $this->redirectToRoute(route: 'app_main'); }; $user = $form->getData(); // hash the plain password return $this->renderForm(view: '@default/user/edit_profile.html.twig', parameters: [ 'user' => $user, 'userForm' => $form ]); if (isset($user)) { } else { throw new UserNotFoundException(); } } #[Route(path: '/profile/{username}', name: 'app_profile')] public function showProfile(UserRepository $userRepository, string $username = ''): Response { /* var User $user */ if ($username === '') { $user = $this->getUser(); } else { $user = $userRepository->findOneBy([ 'username' => $username, ]); } return $this->render(view: 'user/show_profile.html.twig', parameters: [ 'user' => $user, ]); } #[Route(path: '/list_users/', name: 'app_list_user')] public function listUsers(UserRepository $userRepository): Response { $users = $userRepository->findAll(); return $this->render(view: 'user/list_users.html.twig', parameters: [ 'users' => $users, ]); } }