我已经创建了一个注册表单。 但是当我提交时,我有以下错误消息
键“_username”必须是字符串,“NULL”给出
这是我的控制器
public function connexion(Request $request, AuthenticationUtils $authUtils, UserPasswordEncoderInterface $passwordEncoder) {
// get the login error if there is one
$error = $authUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authUtils->getLastUsername();
// 1) build the form
$user = new User();
$form_registration = $this->createForm(RegistrationType::class, $user);
// 2) handle the submit (will only happen on POST)
$form_registration->handleRequest($request);
if ($form_registration->isSubmitted() && $form_registration->isValid()) {
// 3) Encode the password (you could also do this via Doctrine listener)
$password = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
$user->setPassword($password);
// 4) save the User!
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
// ... do any other work - like sending them an email, etc
// maybe set a "flash" success message for the user
return $this->redirectToRoute('connexion');
}
return $this->render('connexion.html.twig', array(
'form_registration' => $form_registration->createView(),
'last_username' => $lastUsername,
'error' => $error,));
}
我的HTML
{{ form_start(form_registration) }}
{{ form_row(form_registration.username) }}
{{ form_row(form_registration.email) }}
{{ form_row(form_registration.plainPassword.first) }}
{{ form_row(form_registration.plainPassword.second) }}
<button type="submit">Register!</button>
{{ form_end(form_registration) }}
你知道为什么我有这个错误信息吗?
通常,当我填写我的用户名时,我不应该拥有它。
我没有复制粘贴我的RegistrationType但是没关系我已经在以前的RegistrationController中测试过它并且它工作得很好..
这是我的Ctrl-u结果
<section class="section-main-inscription_rapide">
<h3>INSCRIPTION GRATUITE</h3>
<form name="registration" method="post">
<div><label for="registration_username" class="required">Username</label><input type="text" id="registration_username" name="registration[username]" required="required" /></div>
<div><label for="registration_email" class="required">Email</label><input type="email" id="registration_email" name="registration[email]" required="required" /></div>
<div><label for="registration_plainPassword_first" class="required">Password</label><input type="password" id="registration_plainPassword_first" name="registration[plainPassword][first]" required="required" /></div>
<div><label for="registration_plainPassword_second" class="required">Repeat Password</label><input type="password" id="registration_plainPassword_second" name="registration[plainPassword][second]" required="required" /></div>
<button type="submit">Register!</button>
<input type="hidden" id="registration__token" name="registration[_token]" value="xQ6gADeUkUb424-2ccvtyXd_atle7dYCPW0OLTefI_g" /></form>
</section>
我的security.yaml:
form_login:
login_path: connexion
check_path: connexion
提前感谢您的帮助。
答案 0 :(得分:3)
form_login有这两个选项
updateUser(event) {
event.preventDefault()
console.log('New value: ' + this.input.value)
this.props.onSubmit(this.input.value)
}
默认情况下,这些设置为_username和_password,因此您必须将字段名称更改为_username和_password,或将security.yml文件username_parameter和password_parameter更改为您的字段名称。
答案 1 :(得分:2)
或者在您的表单类中,您可以覆盖方法&#39; getBlockPrefix()&#39;并使其返回一个空字符串。
答案 2 :(得分:1)
我遇到了同样的问题。 在security.yml中,如果您修改了'login-path'和'check_path' 确保“ UserController”(处理登录过程的那个)中的路由与登录路由具有相同的命名。 例如:login_path:admin_login check_path:admin_login 和登录控制器的相同路径
,然后必须检查的是Authenticator中的常量 LOGIN_ROUTE ='admin_login'。帮我解决了它具有默认路由,因此我遇到了错误。
btw:无需更改登录名中“用户名”的名称输入。通过“电子邮件”可以正常工作。
答案 3 :(得分:0)
将输入的名称从注册[用户名] 更改为_username
<input type="text" id="registration_username" name="_username" required="required" /></div>