Symfony 4 - 键“_username”必须是字符串,给定 "NULL"
Symfony 4 - The key "_username" must be a string, "NULL" given
我的项目 symfony 4 我有一个功能可以为我提供身份验证和注册:
/**
* Login
*
* @Route("/login", name="account_login")
*
* @return Response
*/
public function login2(AuthenticationUtils $utils, Request $request, ObjectManager $manager, UserPasswordEncoderInterface $encoder)
{
// Connexion
$error = $utils->getLastAuthenticationError();
$username = $utils->getLastUsername();
// Inscription
$user = new User();
$form = $this->createForm(RegistrationType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$password = $encoder->encodePassword($user, $user->getPassword());
$user->setHash($password);
$manager->persist($user);
$manager->flush();
$this->addFlash(
'success',
'Votre compte a bien été créé ! Vous pouvez maintenant vous connecter'
);
$this->redirectToRoute('account_login');
}
return $this->render('security/login.html.twig', [
'hasError' => $error !== null,
'username' => $username,
'form' => $form->createView(),
]);
}
所以在我的 twig 文件中我有我的登录表单:
<form id="login-form" action="{{path('account_login')}}" method="post" role="form" style="display: block;">
<div class="form-group">
<label for="username">Email</label>
<input type="text" name="_username" id="username" tabindex="1" class="form-control" placeholder="Adresse email" required value={{username}}>
</div>
<div class="form-group">
<label for="password">Mot de passe</label>
<input type="password" name="_password" id="password" tabindex="2" class="form-control" placeholder="Mot de passe">
</div>
</form>
还有我的注册表:
{{form_start(form)}}
{{form_widget(form)}}
{{form_end(form)}}
但是当我提交注册表时,我遇到了这个错误:
The key "_username" must be a string, "NULL" given.
在我的 security.yml 中:
form_login:
login_path: account_login
check_path: account_login
default_target_path: absence_index
logout:
path: account_logout
target: account_login
我找到这个 post : The key "_username" must be a string, "NULL" given symfony 4
我也是这个问题,但是不知道怎么解决
在 一条路线 上混合登录和注册很奇怪......而且我很确定它不会工作(没有太多麻烦),因为框架已经处理请求。 (如:它有一些 "form" 处理请求并产生错误)
但是,您实际上不必将其放在一条路线上...只需将注册和登录表单上的 action
设置为适当的路线并使用相同的模板即可。
我的项目 symfony 4 我有一个功能可以为我提供身份验证和注册:
/**
* Login
*
* @Route("/login", name="account_login")
*
* @return Response
*/
public function login2(AuthenticationUtils $utils, Request $request, ObjectManager $manager, UserPasswordEncoderInterface $encoder)
{
// Connexion
$error = $utils->getLastAuthenticationError();
$username = $utils->getLastUsername();
// Inscription
$user = new User();
$form = $this->createForm(RegistrationType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$password = $encoder->encodePassword($user, $user->getPassword());
$user->setHash($password);
$manager->persist($user);
$manager->flush();
$this->addFlash(
'success',
'Votre compte a bien été créé ! Vous pouvez maintenant vous connecter'
);
$this->redirectToRoute('account_login');
}
return $this->render('security/login.html.twig', [
'hasError' => $error !== null,
'username' => $username,
'form' => $form->createView(),
]);
}
所以在我的 twig 文件中我有我的登录表单:
<form id="login-form" action="{{path('account_login')}}" method="post" role="form" style="display: block;">
<div class="form-group">
<label for="username">Email</label>
<input type="text" name="_username" id="username" tabindex="1" class="form-control" placeholder="Adresse email" required value={{username}}>
</div>
<div class="form-group">
<label for="password">Mot de passe</label>
<input type="password" name="_password" id="password" tabindex="2" class="form-control" placeholder="Mot de passe">
</div>
</form>
还有我的注册表:
{{form_start(form)}}
{{form_widget(form)}}
{{form_end(form)}}
但是当我提交注册表时,我遇到了这个错误:
The key "_username" must be a string, "NULL" given.
在我的 security.yml 中:
form_login:
login_path: account_login
check_path: account_login
default_target_path: absence_index
logout:
path: account_logout
target: account_login
我找到这个 post : The key "_username" must be a string, "NULL" given symfony 4
我也是这个问题,但是不知道怎么解决
在 一条路线 上混合登录和注册很奇怪......而且我很确定它不会工作(没有太多麻烦),因为框架已经处理请求。 (如:它有一些 "form" 处理请求并产生错误)
但是,您实际上不必将其放在一条路线上...只需将注册和登录表单上的 action
设置为适当的路线并使用相同的模板即可。