Symfony FosUserBundle-使用户名为nullable true

Symfony FosUserBundle-使用户名为nullable true,symfony,null,entity,symfony-forms,fosuserbundle,Symfony,Null,Entity,Symfony Forms,Fosuserbundle,社区 我使用FosUserBundle,但用户名有问题 在我的页面上,你只需要一封电子邮件和一个密码。 =>您可以使用用户名!因此,我无法用setUsername$email覆盖实体中的setEmail函数^^ 如果在配置中使用此选项,则会出现以下错误 fos_user: registration: form: validation_groups: [AppRegistration] 错误: SQLSTATE[23000]: Integrity

社区

我使用FosUserBundle,但用户名有问题

在我的页面上,你只需要一封电子邮件和一个密码。 =>您可以使用用户名!因此,我无法用setUsername$email覆盖实体中的setEmail函数^^

如果在配置中使用此选项,则会出现以下错误

fos_user:
    registration:
        form:
            validation_groups: [AppRegistration]
错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username' cannot be null 
我能做什么

提前谢谢你

# app/config/security.yml
security:
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email
更改您的security.yml以使fosuserbundle接受电子邮件作为用户名,并使您覆盖setUsername方法,因为用户名不能为空。例如

public function setEmail($email){
    parent::setEmail($email);
    parent::setUsername($email);
}
更改您的security.yml以使fosuserbundle接受电子邮件作为用户名,并使您覆盖setUsername方法,因为用户名不能为空。例如

public function setEmail($email){
    parent::setEmail($email);
    parent::setUsername($email);
}
您可以使用用户实体上方的条令\ORM\Mapping\AttributeOverrides和条令\ORM\Mapping\AttributeOverride注释使用户名为空,如下所示:

使用条令\ORM\Mapping\AttributeOverrides; 使用条令\ORM\Mapping\AttributeOverride; /** *使用者 * *@ORM\Tablename=fos\u用户 *@AttributeOverrides{ *@AttributeOverridename=用户名, *column=@ORM\column *name=用户名, *类型=字符串, *长度=255, *唯一=错误, *可为空=真 * * , *@AttributeOverridename=usernameCononical, *column=@ORM\column *name=usernamecononical, *类型=字符串, *长度=255, *唯一=错误, *可为空=真 * * * } *@ORM\EntityrepositoryClass=AppBundle\Repository\UserRepository */ 类用户扩展了BaseUser { //.. 这段代码将使用户名在数据库中为空,而在验证规则中不是必需的

资料来源:

您可以使用用户实体上方的条令\ORM\Mapping\AttributeOverrides和条令\ORM\Mapping\AttributeOverride注释使用户名为空,如下所示:

使用条令\ORM\Mapping\AttributeOverrides; 使用条令\ORM\Mapping\AttributeOverride; /** *使用者 * *@ORM\Tablename=fos\u用户 *@AttributeOverrides{ *@AttributeOverridename=用户名, *column=@ORM\column *name=用户名, *类型=字符串, *长度=255, *唯一=错误, *可为空=真 * * , *@AttributeOverridename=usernameCononical, *column=@ORM\column *name=usernamecononical, *类型=字符串, *长度=255, *唯一=错误, *可为空=真 * * * } *@ORM\EntityrepositoryClass=AppBundle\Repository\UserRepository */ 类用户扩展了BaseUser { //.. 这段代码将使用户名在数据库中为空,而在验证规则中不是必需的

资料来源:

删除用户名可能会导致复杂性,因此我建议您覆盖setEmail$email,以便在用户类中也设置用户名。这可能是多余的,但要确保每个需要用户名的内容仍然有效,例如,通过用户名+密码登录。当然,您还必须相应地更改注册表单,以便用户Let’除了他们的电子邮件地址之外,不要选择其他用户名,而且你可能希望将翻译改为电子邮件而不是用户名。嗯,好的。我需要一个字段eusername,它是正确的可选用户名和用户名电子邮件…然后我必须这样做。谢谢。希望还有其他方法。也许将来!删除用户名可能会导致e,因此我建议您覆盖setEmail$email,以便在用户类中也设置用户名。这可能是多余的,但要确保每个需要用户名的内容仍然有效,例如,通过用户名+密码登录。当然,您还必须相应地更改注册表单,以便用户不选择用户名以外的用户名他们的电子邮件地址,你可能想把翻译改为email而不是username。嗯,好的。我需要一个字段eusername,它是正确的、可选的用户名和username email…然后我必须这样做。谢谢。希望还有另一种方法。也许将来吧!既然mahok的答案,我也会这样做。我添加了一个子用户名,其中包含单击->可选我想要一个解决方案hwo接受空用户名并通过电子邮件和用户名(如果不是空的话)登录。@khaled_webdev您可能想问一个问题,因为mahok的回答也是这样。我添加了一个子用户名,其中包含->可选我想要一个解决方案hwo接受空用户名并通过电子邮件和用户名(如果不是空的话)登录.@khaled_webdev你可能想问个问题