Commuity,
我使用FosUserBundle,我的用户名有问题。
在我的页面上,您只需要一封电子邮件和一个密码。 =>你可以使用用户名! (因为那样,我无法使用setUsername($ email)覆盖实体中的setEmail()函数^^
如果我在配置中使用此功能,则会出现以下错误。
fos_user:
registration:
form:
validation_groups: [AppRegistration]
错误:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username' cannot be null
我该怎么办?
提前谢谢你!
答案 0 :(得分:5)
# app/config/security.yml
security:
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
更改您的security.yml,使fosuserbundle接受来自Logging by Username or Email的电子邮件作为用户名,然后让您覆盖您的setUsername方法,因为用户名不能为空。 E.g。
public function setEmail($email){
parent::setEmail($email);
parent::setUsername($email);
}
答案 1 :(得分:0)
通过使用上面的 Doctrine \ ORM \ Mapping \ AttributeOverrides 和 Doctrine \ ORM \ Mapping \ AttributeOverride 注释,您可以使用户名 nullable 这样的用户实体:
use Doctrine\ORM\Mapping\AttributeOverrides;
use Doctrine\ORM\Mapping\AttributeOverride;
/**
* User
*
* @ORM\Table(name="fos_user")
* @AttributeOverrides({
* @AttributeOverride(name="username",
* column=@ORM\Column(
* name="username",
* type="string",
* length=255,
* unique=false,
* nullable=true
* )
* ),
* @AttributeOverride(name="usernameCanonical",
* column=@ORM\Column(
* name="usernameCanonical",
* type="string",
* length=255,
* unique=false,
* nullable=true
* )
* )
* })
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*/
class User extends BaseUser
{
//..
此代码将使用户名在数据库中可以为空,不需要,在验证规则中。
来源: https://openclassrooms.com/forum/sujet/symfony-supprimer-username-fosuserbundle