src/Controller/DefaultController.php line 52

Open in your IDE?
  1. <?php namespace App\Controller;
  2. use App\Entity\Hymns;
  3. use App\Entity\User;
  4. use DateTime;
  5. use Exception;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\Form\Extension\Core\Type\{EmailType, HiddenType, PasswordType, TextType};
  9. use Symfony\Component\HttpFoundation\{Request, Response};
  10. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  11. /**
  12. * Class DefaultController.
  13. */
  14. class DefaultController extends AbstractController
  15. {
  16. /**
  17. * @var UserPasswordHasherInterface
  18. */
  19. private UserPasswordHasherInterface $passwordEncoder;
  20. /**
  21. * User constructor.
  22. */
  23. public function __construct(UserPasswordHasherInterface $passwordEncoder)
  24. {
  25. $this->passwordEncoder = $passwordEncoder;
  26. }
  27. /**
  28. * @Symfony\Component\Routing\Annotation\Route("/", name="home")
  29. */
  30. public function index(ManagerRegistry $registry): Response
  31. {
  32. $hymnCount = $registry->getRepository(Hymns::class)->count([]);
  33. return $this->render('default/index.html.twig', compact('hymnCount'));
  34. }
  35. /**
  36. * @Symfony\Component\Routing\Annotation\Route("/about", name="about")
  37. */
  38. public function about(): Response
  39. {
  40. return $this->render('default/about.html.twig');
  41. }
  42. /**
  43. * @Symfony\Component\Routing\Annotation\Route("/privacy-policy", name="privacy-policy")
  44. */
  45. public function privacyPolicy(): Response
  46. {
  47. return $this->render('default/privacy-policy.html.twig');
  48. }
  49. /**
  50. * @Symfony\Component\Routing\Annotation\Route("/terms", name="terms")
  51. */
  52. public function terms(): Response
  53. {
  54. return $this->render('default/terms.html.twig');
  55. }
  56. /**
  57. * @Symfony\Component\Routing\Annotation\Route("/register", name="register")
  58. *
  59. * @throws Exception
  60. */
  61. public function register(Request $request, ManagerRegistry $doctrine): Response
  62. {
  63. $form = $this->createFormBuilder()
  64. ->add('name', TextType::class)
  65. ->add('username', TextType::class)
  66. ->add('email', EmailType::class)
  67. ->add('password', PasswordType::class)
  68. ->add('roles', HiddenType::class)
  69. ->getForm();
  70. $form->handleRequest($request);
  71. if ($form->isSubmitted() && $form->isValid()) {
  72. $data = $form->getData();
  73. $user = new User();
  74. $user->setName($data['name'])
  75. ->setUsername($data['username'])
  76. ->setEmail($data['email'])
  77. ->setPassword($this->passwordEncoder->hashPassword($user, $data['password']))
  78. ->setCreatedAt(new Datetime('now'))
  79. ->setUpdatedAt(new Datetime('now'))
  80. ->setRoles(['1' => 'ROLE_SUBSCRIBER'])
  81. ;
  82. $entityManager = $doctrine->getManager();
  83. $entityManager->persist($user);
  84. $entityManager->flush();
  85. return $this->redirectToRoute('home');
  86. }
  87. return $this->render('default/register.html.twig', ['form' => $form->createView()]);
  88. }
  89. }