FosUserBundle - 使用户名可以为空

时间:2013-06-28 16:43:20

标签: symfony null entity symfony-forms fosuserbundle

Commuity,

我使用FosUserBundle,我的用户名有问题。

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

如果我在配置中使用此功能,则会出现以下错误。

fos_user:
    registration:
        form:
            validation_groups: [AppRegistration]

错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username' cannot be null 

我该怎么办?

提前谢谢你!

2 个答案:

答案 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