Логин форма изобщо не се събмитва, когато е сложена на едно с регистрационната форма
Опитвам се да направя възможно логин и регистрационна форма да стоят на една страница и при натиснат бутон(събмит) виждайки коя форма е събмитната да се отива към дадената функция в дадения контролер. Но когато събмитна формата си в сегашното състоянеи нищо не става, освен да ми се покаже горе в URL-а като данни. Не работи даже валидацията, ако въведа грешни данни. Странно обаче, регистрационната ми форма си върви нормално.
Кодът ми(контролерът):
/** * @Route("/",name="home") */ public function homeAction(Request $request, UserPasswordEncoderInterface $passEncoder, AuthenticationUtils $authenticationUtils) { $greeting = $this->getDoctrine()->getRepository(UserGreetings::class)->randomGreet(); $user = new User(); $error = null; $form = $this->createForm(UserType::class, $user); if($request->isMethod('POST')) { try { $form->handleRequest($request); if ($form->isSubmitted()) { $encryptedPassword = $passEncoder->encodePassword($user, $user->getPassword()); $user->setPassword($encryptedPassword); $user->setIsActive(); $user->setRoles(); $em = $this->getDoctrine()->getManager(); $em->persist($user); $em->flush(); $this->addFlash('message', 'You registered successfully! Now you can login. :)'); return $this->redirectToRoute('home'); } } catch (\Exception $exc) { $error = 'Error in adding user: ' . $exc->getCode() . ' ' . $exc->getMessage(); } } return $this->render('default/home.html.twig', ['form' => $form->createView(), 'error' => $error, 'greeting' => $greeting, 'name' => null, 'errorLog' =>null]); } /** * @Route("/", name="log") * @param Request $request * @param AuthenticationUtils $authenticationUtils * @return \Symfony\Component\HttpFoundation\Response */ public function login(Request $request ,AuthenticationUtils $authenticationUtils) { $authError = $authenticationUtils->getLastAuthenticationError(); $userNameLast = $authenticationUtils->getLastUsername(); return $this->render('default/home.html.twig', array('name' => $userNameLast, 'errorLog' =>$authError)); }
Добавил съм в масива на регистрацията 'name' => null, 'errorLog' =>null нужни на логин формата, защото иначе гърми че ги няма(но аз ги пращам през другата функция, не знам защо гърми така затова съм ги сложил като null стойности).
Кодът на view-то ми:
<div class="card card-body" id="regged"> {#{{ form_start(form) }}#} <form action="{{ path('home') }}" method="post"> <legend class="m-b-1 text-sm-center">Register</legend> <div class="form-group input-group"> <input type="email" name="app_bundle_user_type[email]" id="mail"> {#{{ form_widget(form.email, {'id': 'mail', 'attr': {'class': 'form-control', 'placeholder': 'Type here'}}) }}#} <label for="mail" class="form-control-placeholder">Email</label> </div> <div class="form-group input-group"> {#{{ form_widget(form.username, {'id': 'username', 'attr': {'class': 'form-control', 'placeholder': 'Type here'}}) }}#} <input type="text" name="app_bundle_user_type[username]" id="username"> <label for="username" class="form-control-placeholder">Username</label> </div> <div class="form-group input-group"> <input type="password" name="app_bundle_user_type[password][pass]" id="passwordFirst"> {#{{ form_widget(form.password.pass, {'id': "passwordFirst", 'attr': {'class': 'form-control', 'placeholder': 'Password'}}) }}#} <label for="passwordFirst" class="form-control-placeholder">First</label> </div> <div class="form-group input-group"> {#{{ form_widget(form.password.conf, {'id': "passwordConf", 'attr': {'class': 'form-control', 'placeholder': 'Password'}}) }}#} <input type="password" name="app_bundle_user_type[password][conf]" id="passwordConf"> <label for="passwordConf" class="form-control-placeholder">Confirm</label> </div> <div class="text-center"> <input type="submit" name="app_bundle_user_type[Signup]"> {#{{ form_row(form.Signup, {'attr':{'class': 'btn btn-success btn-sm'}}) }}#} </div> </form> </div> <div class="card card-body" id="loged"> {% if errorLog %} <p> {{ errorLog.messageKey|trans(errorLog.messageData, 'security') }} </p> {% endif %} <form action="{{ path('log') }}"> <p> <input type="text" id="username" name="_username" placeholder="username..." value="{{ name }}"><br/><br/> <input type="password" id="password" name="_password" placeholder="password..."> <input type="hidden" name="_target_path" value="{{ path('profile') }}"> <input type="hidden" name="csrf_token" value=""> </p> <button type="submit">Sign in</button> </form> </div>
И security файлът ми:
main: anonymous: ~ form_login: login_path: home check_path: home logout: path: /logout target: /
Промених си security.yml файла :
Обаче се случва абсолютно същото. Без да гръмне, без нищо. Просто ме връща отново на страницата с регистрация и логин и с напълнен URL.
Tова ми излиза в URL-а(всъщност въведените данни):
http://localhost:8000/log?_username=pesho&_password=123&_target_path=%2Fprofile&csrf_token=
Ако правя същото, но логинът ми стои на различна страница от регистрацията всичко работи нормално и ме пренасочва. Моля помощ, нямам представа защо не се получава.
Щом параметрите излизат в URL-a, значи не е правилен Request method-a. Мисля, че с оправянето му във формуляра би трябвало да сработи вече.
Благодаря много. Това беше, написах метода на формата да бъде POST, какъвто всъщност трябва да е за логин форма и всичко тръгна. :)