我想在我的用户实体上将电子邮件设置为不需要。怎么办?我在 FOSUserBundle/config/ 中进行了搜索,但没有找到任何关于电子邮件的“必需”参数。
3 回答
按照 Tib 的回答,这就是我的做法。它工作正常:
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity
* @ORM\AttributeOverrides({
* @ORM\AttributeOverride(name="email", column=@ORM\Column(type="string", name="email", length=255, unique=false, nullable=true)),
* @ORM\AttributeOverride(name="emailCanonical", column=@ORM\Column(type="string", name="email_canonical", length=255, unique=false, nullable=true))
* })
*/
class User extends BaseUser {
// ...
}
编辑 :
以前的解决方案很容易实现并且运行良好,但是在将 Symfony 更新到版本 2.1.8 并且没有更改我的应用程序中的任何内容后,生成实体失败并抛出 Doctrine 映射异常(无效的字段覆盖......)
尽管浪费了很多时间试图解决这个问题,但我还是被困住了。
然后我终于意识到 FOSUserBundle 提供了很多我不使用的功能,但并不能真正满足我的需求,这些功能非常基本。
我需要禁用电子邮件要求,因为我的应用程序用户管理是“类似软件”:没有注册,没有电子邮件发送,没有配置文件,用户和角色仅由管理员管理,等等......
我正在调整一个不是为我的需要而设计的工具。所以我决定自己实现 Symfony 安全性。
工作量有点大,但难度不是很大,而且结果比适配 FOSUserBundle 要好得多,也更灵活。当然,对于“经典”网站或 Web 应用程序,FOSUserBundle 是最好的。
如果你也是这种情况,我建议你这样做。这是开始的文档:书中的安全性和食谱中的安全性
我希望这可以帮助你。
对不起我的英语不好,我希望它是可以理解的
检查此 PR https://github.com/doctrine/orm-documentation/pull/117/files并查看@AttributeOverrides
您需要覆盖实体用户中的以下方法。
class User extends BaseUser // inheritance from fos
{
/**
* @var string
* @ORM\column(type="string", name="email", length=255, unique=true, )
* @Assert\Email(
* checkMX = true
* )*/
protected $email
}
}
您需要将表定义更改为:
class User extends BaseUser // inheritance from fosUserBundle
{
/**
* @var string
* @ORM\column(type="string", name="email", length=255, unique=false, nullable=true )
*/
protected $email
}
}
emailCanonical 属性也需要同样的东西。
如果那不通过。您需要将整个模型从 FOS 复制到您的捆绑包中,然后按照我的说明进行更改。
检查文档:https ://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.2.0/Resources/doc/doctrine.md
问候马克斯