From 75532b5fcab2719a5f9285858d18d751b1e6bfe3 Mon Sep 17 00:00:00 2001 From: Jesse Rushlow Date: Fri, 30 Oct 2020 12:17:56 -0400 Subject: [PATCH] php8 attributes support for generated controllers --- src/Maker/AbstractMaker.php | 5 ++++ src/Maker/MakeController.php | 1 + src/Maker/MakeCrud.php | 1 + src/Maker/MakeRegistrationForm.php | 1 + src/Maker/MakeResetPassword.php | 1 + .../skeleton/controller/Controller.tpl.php | 4 ++++ .../crud/controller/Controller.tpl.php | 24 +++++++++++++++++++ .../RegistrationController.tpl.php | 8 +++++++ .../ResetPasswordController.tpl.php | 19 +++++++++++++++ 9 files changed, 64 insertions(+) diff --git a/src/Maker/AbstractMaker.php b/src/Maker/AbstractMaker.php index 3d5a84841..8017aa012 100644 --- a/src/Maker/AbstractMaker.php +++ b/src/Maker/AbstractMaker.php @@ -48,4 +48,9 @@ protected function addDependencies(array $dependencies, string $message = null): $message ); } + + final protected function useAttributes(): bool + { + return \PHP_VERSION_ID >= 80000; + } } diff --git a/src/Maker/MakeController.php b/src/Maker/MakeController.php index be4ef1c2e..fc769f635 100644 --- a/src/Maker/MakeController.php +++ b/src/Maker/MakeController.php @@ -58,6 +58,7 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen $controllerClassNameDetails->getFullName(), 'controller/Controller.tpl.php', [ + 'use_attributes' => $this->useAttributes(), 'route_path' => Str::asRoutePath($controllerClassNameDetails->getRelativeNameWithoutSuffix()), 'route_name' => Str::asRouteName($controllerClassNameDetails->getRelativeNameWithoutSuffix()), 'with_template' => $this->isTwigInstalled() && !$noTemplate, diff --git a/src/Maker/MakeCrud.php b/src/Maker/MakeCrud.php index be56c00a6..de4b9a89a 100644 --- a/src/Maker/MakeCrud.php +++ b/src/Maker/MakeCrud.php @@ -143,6 +143,7 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen $controllerClassDetails->getFullName(), 'crud/controller/Controller.tpl.php', array_merge([ + 'use_attributes' => $this->useAttributes(), 'entity_full_class_name' => $entityClassDetails->getFullName(), 'entity_class_name' => $entityClassDetails->getShortName(), 'form_full_class_name' => $formClassDetails->getFullName(), diff --git a/src/Maker/MakeRegistrationForm.php b/src/Maker/MakeRegistrationForm.php index 17d1a7cb0..84791959f 100644 --- a/src/Maker/MakeRegistrationForm.php +++ b/src/Maker/MakeRegistrationForm.php @@ -258,6 +258,7 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen $controllerClassNameDetails->getFullName(), 'registration/RegistrationController.tpl.php', [ + 'use_attributes' => $this->useAttributes(), 'route_path' => '/register', 'route_name' => 'app_register', 'form_class_name' => $formClassDetails->getShortName(), diff --git a/src/Maker/MakeResetPassword.php b/src/Maker/MakeResetPassword.php index b3de79c45..8a8df6800 100644 --- a/src/Maker/MakeResetPassword.php +++ b/src/Maker/MakeResetPassword.php @@ -197,6 +197,7 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen $controllerClassNameDetails->getFullName(), 'resetPassword/ResetPasswordController.tpl.php', [ + 'use_attributes' => $this->useAttributes(), 'user_full_class_name' => $userClassNameDetails->getFullName(), 'user_class_name' => $userClassNameDetails->getShortName(), 'request_form_type_full_class_name' => $requestFormTypeClassNameDetails->getFullName(), diff --git a/src/Resources/skeleton/controller/Controller.tpl.php b/src/Resources/skeleton/controller/Controller.tpl.php index 7a7b6345a..1968e1753 100644 --- a/src/Resources/skeleton/controller/Controller.tpl.php +++ b/src/Resources/skeleton/controller/Controller.tpl.php @@ -8,9 +8,13 @@ class extends { + + #[Route('', name: '')] + /** * @Route("", name="") */ + public function index(): Response { diff --git a/src/Resources/skeleton/crud/controller/Controller.tpl.php b/src/Resources/skeleton/crud/controller/Controller.tpl.php index 24b07a445..d17a3e867 100644 --- a/src/Resources/skeleton/crud/controller/Controller.tpl.php +++ b/src/Resources/skeleton/crud/controller/Controller.tpl.php @@ -12,14 +12,22 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; + +#[Route('')] + /** * @Route("") */ + class extends { + + #[Route('/', name: '_index', methods: ['GET'])] + /** * @Route("/", name="_index", methods={"GET"}) */ + public function index( $): Response { @@ -40,9 +48,13 @@ public function index(): Response } + + #[Route('/new', name: '_new', methods: ['GET', 'POST'])] + /** * @Route("/new", name="_new", methods={"GET","POST"}) */ + public function new(Request $request): Response { $ = new (); @@ -63,9 +75,13 @@ public function new(Request $request): Response ]); } + + #[Route('/{}', name: '_show', methods: ['GET'])] + /** * @Route("/{}", name="_show", methods={"GET"}) */ + public function show( $): Response { return $this->render('/show.html.twig', [ @@ -73,9 +89,13 @@ public function show( $): Re ]); } + + #[Route('/{}/edit', name: '_edit', methods: ['GET', 'POST'])] + /** * @Route("/{}/edit", name="_edit", methods={"GET","POST"}) */ + public function edit(Request $request, $): Response { $form = $this->createForm(::class, $); @@ -93,9 +113,13 @@ public function edit(Request $request, $ + #[Route('/{}', name: '_delete', methods: ['DELETE'])] + /** * @Route("/{}", name="_delete", methods={"DELETE"}) */ + public function delete(Request $request, $): Response { if ($this->isCsrfTokenValid('delete'.$->get(), $request->request->get('_token'))) { diff --git a/src/Resources/skeleton/registration/RegistrationController.tpl.php b/src/Resources/skeleton/registration/RegistrationController.tpl.php index 23f6bb8ce..8b87b5253 100644 --- a/src/Resources/skeleton/registration/RegistrationController.tpl.php +++ b/src/Resources/skeleton/registration/RegistrationController.tpl.php @@ -39,9 +39,13 @@ public function __construct(EmailVerifier $emailVerifier) } + + #[Route('', name: '')] + /** * @Route("", name="") */ + public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder): Response { $user = new (); @@ -91,9 +95,13 @@ public function register(Request $request, UserPasswordEncoderInterface $passwor } + + #[Route('/verify/email', name: 'app_verify_email')] + /** * @Route("/verify/email", name="app_verify_email") */ + public function verifyUserEmail(Request $request): Response { $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY'); diff --git a/src/Resources/skeleton/resetPassword/ResetPasswordController.tpl.php b/src/Resources/skeleton/resetPassword/ResetPasswordController.tpl.php index 4ceeea91b..df93cffa1 100644 --- a/src/Resources/skeleton/resetPassword/ResetPasswordController.tpl.php +++ b/src/Resources/skeleton/resetPassword/ResetPasswordController.tpl.php @@ -18,9 +18,13 @@ use SymfonyCasts\Bundle\ResetPassword\Exception\ResetPasswordExceptionInterface; use SymfonyCasts\Bundle\ResetPassword\ResetPasswordHelperInterface; + +#[Route('/reset-password')] + /** * @Route("/reset-password") */ + class extends AbstractController { use ResetPasswordControllerTrait; @@ -35,8 +39,13 @@ public function __construct(ResetPasswordHelperInterface $resetPasswordHelper) /** * Display & process form to request a password reset. * + + */ + #[Route('', name: 'app_forgot_password_request')] + * @Route("", name="app_forgot_password_request") */ + public function request(Request $request, MailerInterface $mailer): Response { $form = $this->createForm(::class); @@ -57,8 +66,13 @@ public function request(Request $request, MailerInterface $mailer): Response /** * Confirmation page after a user has requested a password reset. * + + */ + #[Route('/check-email', name: 'app_check_email')] + * @Route("/check-email", name="app_check_email") */ + public function checkEmail(): Response { // We prevent users from directly accessing this page @@ -74,8 +88,13 @@ public function checkEmail(): Response /** * Validates and process the reset URL that the user clicked in their email. * + + */ + #[Route('/reset/{token}', name: 'app_reset_password')] + * @Route("/reset/{token}", name="app_reset_password") */ + public function reset(Request $request, UserPasswordEncoderInterface $passwordEncoder, string $token = null): Response { if ($token) {