Формы регистрации и входа на одной странице не работают при отправке [Symfony] - PullRequest
0 голосов
/ 20 декабря 2018

Попытка войти в систему пользователя из формы, которая находится на том же маршруте / странице, что и форма регистрации.

Я попытался, проверив запрос-> имеет, какая форма отправлена.Но это не работает, как задумано.Если я возвращаю конкретный рендер внутри оператора else, я получаю «Переменная« форма »не существует», когда она действительно существует, но в операторе if.Если я добавлю переменную форму внутри оператора else после того, как заполню поле ввода имени пользователя и пароля, меня попросят также заполнить поля ввода формы регистрации.

Мой контроллер для форм регистрации и входа (попробовал решение для нескольких форм, найденных в stackoverflow с операторами if):

 /**
 * @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->request->has('form')) {
        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]);
    } else {
        $authError = $authenticationUtils->getLastAuthenticationError();

        $userNameLast = $authenticationUtils->getLastUsername();
        return $this->render('default/home.html.twig',
            ['form' => $form->createView(), 'error' => $error, 'greeting' => $greeting, 'name' => $userNameLast, 'errorLog' => $authError]);
    }


    return $this->render('default/home.html.twig',
        ['form' => $form->createView(), 'error' => $error, 'greeting' => $greeting, 'name' => $userNameLast, 'errorLog' => $authError]);
}

Мой шаблон:

 {% block body %}



<div class="card card-body" id="regged">
    {{ form_start(form) }}
    <legend class="m-b-1 text-sm-center">Register</legend>
    <div class="form-group input-group">
        {{ 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'}}) }}
        <label for="username" class="form-control-placeholder">Username</label>
    </div>
    <div class="form-group input-group">
        {{ 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'}}) }}
        <label for="passwordConf" class="form-control-placeholder">Confirm</label>
    </div>
    <div class="text-center">
    {{ form_row(form.Signup, {'attr':{'class': 'btn btn-success btn-sm'}}) }}
    </div>
</div>

<div class="card card-body" id="loged">
    {% if errorLog %}
        <p>
            {{ errorLog.messageKey|trans(errorLog.messageData, 'security') }}
        </p>
    {% endif %}
    <form action="{{ path('home') }}" method="post">
        <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>

{% for message in app.flashes('message') %}
<div class="alert alert-success" id="reg_mess">
    {{ message }}
</div>
{% endfor %}

<div id="mes">
<div class="card card-header"></div>
<div class="card card-body">
    {% for greet in greeting %}
    {{ greet.greetingText }}
    {% endfor %}
</div>
</div>





{% endblock %}

Я хочу иметь возможность отправить форму входа или форму регистрации при нажатии накнопка отправки формы.Прямо сейчас, если я пытаюсь зарегистрировать нового пользователя, ничего не происходит, также, когда форма входа в систему заполнена, интерфейсная защита хочет, чтобы форма регистрации также была заполнена.

1 Ответ

0 голосов
/ 20 декабря 2018

Вы можете отправить действие на login_check.

  <form action="{{ path('home') }}" method="post">
        <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>

, и вы можете обрабатывать регистрацию на homeAction

...