Софтуерно Инженерство
Loading...
+ Нов въпрос
ivanp avatar ivanp 0 Точки

Логин форма изобщо не се събмитва, когато е сложена на едно с регистрационната форма

Опитвам се да направя възможно логин и регистрационна форма да стоят на една страница и при натиснат бутон(събмит) виждайки коя форма е събмитната да се отива към дадената функция в дадения контролер. Но когато събмитна формата си в сегашното състоянеи нищо не става, освен да ми се покаже горе в 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: /
Тагове:
0
PHP MVC Frameworks 20/12/2018 17:13:57
RoYaL avatar RoYaL SoftUni Team Trainer 6845 Точки

Защо формуляра ти за логване изпраща към path("log"), като не е настроено това да ти е логин пътя? Или промени на къде изпраща формулярът или настрой логин пътят да е "log"

0
ivanp avatar ivanp 0 Точки

Промених си security.yml файла :

main:
    anonymous: ~
    form_login:
      login_path: log
      check_path: log
    logout:
      path: /logout
      target: /

 

Обаче се случва абсолютно същото. Без да гръмне, без нищо. Просто ме връща отново на страницата с регистрация и логин и с напълнен URL.

Tова ми излиза в URL-а(всъщност въведените данни): 

http://localhost:8000/log?_username=pesho&_password=123&_target_path=%2Fprofile&csrf_token=

Ако правя същото, но логинът ми стои на различна страница от регистрацията всичко работи нормално и ме пренасочва. Моля помощ, нямам представа защо не се получава.

0
RoYaL avatar RoYaL SoftUni Team Trainer 6845 Точки

Щом параметрите излизат в URL-a, значи не е правилен Request method-a. Мисля, че с оправянето му във формуляра би трябвало да сработи вече.

0
ivanp avatar ivanp 0 Точки

Благодаря много. Това беше, написах метода на формата да бъде POST, какъвто всъщност трябва да е за логин форма и всичко тръгна. :)

0