diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1ed453a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.{js,json,yml}] +charset = utf-8 +indent_style = space +indent_size = 2 diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..c86d7e5 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,2 @@ +yarnPath: .yarn/releases/yarn-3.6.3.cjs +nodeLinker: node-modules diff --git a/src/Controller/PageController.php b/src/Controller/PageController.php index 72bef0b..941f283 100644 --- a/src/Controller/PageController.php +++ b/src/Controller/PageController.php @@ -10,8 +10,10 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Security\Http\Attribute\IsGranted; #[Route('/page')] +#[IsGranted('IS_AUTHENTICATED_FULLY')] class PageController extends AbstractController { #[Route('/', name: 'app_page_index', methods: ['GET'])] diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php new file mode 100644 index 0000000..3d56664 --- /dev/null +++ b/src/Controller/UserController.php @@ -0,0 +1,81 @@ +render('user/index.html.twig', [ + 'users' => $userRepository->findAll(), + ]); + } + + #[Route('/new', name: 'app_user_new', methods: ['GET', 'POST'])] + public function new(Request $request, EntityManagerInterface $entityManager): Response + { + $user = new User(); + $form = $this->createForm(UserType::class, $user); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->persist($user); + $entityManager->flush(); + + return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER); + } + + return $this->render('user/new.html.twig', [ + 'user' => $user, + 'form' => $form, + ]); + } + + #[Route('/{id}', name: 'app_user_show', methods: ['GET'])] + public function show(User $user): Response + { + return $this->render('user/show.html.twig', [ + 'user' => $user, + ]); + } + + #[Route('/{id}/edit', name: 'app_user_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, User $user, EntityManagerInterface $entityManager): Response + { + $form = $this->createForm(UserType::class, $user); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->flush(); + + return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER); + } + + return $this->render('user/edit.html.twig', [ + 'user' => $user, + 'form' => $form, + ]); + } + + #[Route('/{id}', name: 'app_user_delete', methods: ['POST'])] + public function delete(Request $request, User $user, EntityManagerInterface $entityManager): Response + { + if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) { + $entityManager->remove($user); + $entityManager->flush(); + } + + return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Form/UserType.php b/src/Form/UserType.php new file mode 100644 index 0000000..e39705c --- /dev/null +++ b/src/Form/UserType.php @@ -0,0 +1,30 @@ +add('email') + ->add('displayName') + ->add('roles') + ->add('password') + ->add('createdAt') + ->add('updatedAt') + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig index 1ebcc75..503ce96 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -40,7 +40,7 @@ Pages - + Users diff --git a/templates/user/_delete_form.html.twig b/templates/user/_delete_form.html.twig new file mode 100644 index 0000000..6d59fa6 --- /dev/null +++ b/templates/user/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/user/_form.html.twig b/templates/user/_form.html.twig new file mode 100644 index 0000000..bf20b98 --- /dev/null +++ b/templates/user/_form.html.twig @@ -0,0 +1,4 @@ +{{ form_start(form) }} + {{ form_widget(form) }} + +{{ form_end(form) }} diff --git a/templates/user/edit.html.twig b/templates/user/edit.html.twig new file mode 100644 index 0000000..141d94a --- /dev/null +++ b/templates/user/edit.html.twig @@ -0,0 +1,13 @@ +{% extends 'base.html.twig' %} + +{% block title %}Edit User{% endblock %} + +{% block body %} +

Edit User

+ + {{ include('user/_form.html.twig', {'button_label': 'Update'}) }} + + back to list + + {{ include('user/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/user/index.html.twig b/templates/user/index.html.twig new file mode 100644 index 0000000..3ac79b9 --- /dev/null +++ b/templates/user/index.html.twig @@ -0,0 +1,45 @@ +{% extends 'base.html.twig' %} + +{% block title %}User index{% endblock %} + +{% block body %} +

User index

+ + + + + + + + + + + + + + + + {% for user in users %} + + + + + + + + + + + {% else %} + + + + {% endfor %} + +
IdEmailDisplayNameRolesPasswordCreatedAtUpdatedAtactions
{{ user.id }}{{ user.email }}{{ user.displayName }}{{ user.roles ? user.roles|json_encode : '' }}{{ user.password }}{{ user.createdAt ? user.createdAt|date('Y-m-d H:i:s') : '' }}{{ user.updatedAt ? user.updatedAt|date('Y-m-d H:i:s') : '' }} + show + edit +
no records found
+ + Create new +{% endblock %} diff --git a/templates/user/new.html.twig b/templates/user/new.html.twig new file mode 100644 index 0000000..35e728d --- /dev/null +++ b/templates/user/new.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block title %}New User{% endblock %} + +{% block body %} +

Create new User

+ + {{ include('user/_form.html.twig') }} + + back to list +{% endblock %} diff --git a/templates/user/show.html.twig b/templates/user/show.html.twig new file mode 100644 index 0000000..0348cdd --- /dev/null +++ b/templates/user/show.html.twig @@ -0,0 +1,46 @@ +{% extends 'base.html.twig' %} + +{% block title %}User{% endblock %} + +{% block body %} +

User

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Id{{ user.id }}
Email{{ user.email }}
DisplayName{{ user.displayName }}
Roles{{ user.roles ? user.roles|json_encode : '' }}
Password{{ user.password }}
CreatedAt{{ user.createdAt ? user.createdAt|date('Y-m-d H:i:s') : '' }}
UpdatedAt{{ user.updatedAt ? user.updatedAt|date('Y-m-d H:i:s') : '' }}
+ + back to list + + edit + + {{ include('user/_delete_form.html.twig') }} +{% endblock %}