Попытка войти в систему пользователя из формы, которая находится на том же маршруте / странице, что и форма регистрации.
Я попытался, проверив запрос-> имеет, какая форма отправлена.Но это не работает, как задумано.Если я возвращаю конкретный рендер внутри оператора 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 %}
Я хочу иметь возможность отправить форму входа или форму регистрации при нажатии накнопка отправки формы.Прямо сейчас, если я пытаюсь зарегистрировать нового пользователя, ничего не происходит, также, когда форма входа в систему заполнена, интерфейсная защита хочет, чтобы форма регистрации также была заполнена.