<?php namespace App\Controller;
use App\Entity\Hymns;
use App\Entity\User;
use DateTime;
use Exception;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\{EmailType, HiddenType, PasswordType, TextType};
use Symfony\Component\HttpFoundation\{Request, Response};
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
/**
* Class DefaultController.
*/
class DefaultController extends AbstractController
{
/**
* @var UserPasswordHasherInterface
*/
private UserPasswordHasherInterface $passwordEncoder;
/**
* User constructor.
*/
public function __construct(UserPasswordHasherInterface $passwordEncoder)
{
$this->passwordEncoder = $passwordEncoder;
}
/**
* @Symfony\Component\Routing\Annotation\Route("/", name="home")
*/
public function index(ManagerRegistry $registry): Response
{
$hymnCount = $registry->getRepository(Hymns::class)->count([]);
return $this->render('default/index.html.twig', compact('hymnCount'));
}
/**
* @Symfony\Component\Routing\Annotation\Route("/about", name="about")
*/
public function about(): Response
{
return $this->render('default/about.html.twig');
}
/**
* @Symfony\Component\Routing\Annotation\Route("/privacy-policy", name="privacy-policy")
*/
public function privacyPolicy(): Response
{
return $this->render('default/privacy-policy.html.twig');
}
/**
* @Symfony\Component\Routing\Annotation\Route("/terms", name="terms")
*/
public function terms(): Response
{
return $this->render('default/terms.html.twig');
}
/**
* @Symfony\Component\Routing\Annotation\Route("/register", name="register")
*
* @throws Exception
*/
public function register(Request $request, ManagerRegistry $doctrine): Response
{
$form = $this->createFormBuilder()
->add('name', TextType::class)
->add('username', TextType::class)
->add('email', EmailType::class)
->add('password', PasswordType::class)
->add('roles', HiddenType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$user = new User();
$user->setName($data['name'])
->setUsername($data['username'])
->setEmail($data['email'])
->setPassword($this->passwordEncoder->hashPassword($user, $data['password']))
->setCreatedAt(new Datetime('now'))
->setUpdatedAt(new Datetime('now'))
->setRoles(['1' => 'ROLE_SUBSCRIBER'])
;
$entityManager = $doctrine->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('home');
}
return $this->render('default/register.html.twig', ['form' => $form->createView()]);
}
}