Hy伙计们,
我决定使用FOSUserBundle来处理我的应用程序中的用户身份验证.
在我的申请中,公司可以注册他们的详细信息(姓名,地址等).
所以我决定创建一个名为Company的实体来保存公司相关数据,并创建一个名为User的实体来分别保存来自FOSUserBundle的用户数据.
我开始覆盖文档Overriding Default FOSUserBundle Forms中描述的默认注册表单,但问题是我无法将我的字段从公司添加到表单,它总是尝试从用户实体访问(可能是因为那个是与FOSUserBundle有关).
有没有办法将公司实体字段放在FOSUser注册表中?
我不想通过使用公司作为FOSUser的基本实体并向其添加所有字段(用户名,电子邮件,密码等)来搞乱数据模型.
最好的祝福,
解决方法:
从语义上讲,用户不必是一个人,所以我认为公司没有理由成为您的应用程序的用户.我也没有理由在数据库中有两个单独的表.
我会创建一个单独的Company类,它扩展了用户类:
namespace Acme\Bundle\AcmeBundle\Entity;
use FOS\UserBundle\Entity\User;
class Company extends User
{
// Your company related fields and related getters/setters go here.
}
然后从配置中覆盖用户类(例如在app / config / config.yml中):
fos_user:
user_class: Acme\Bundle\AcmeBundle\Entity\Company
现在UserBundle知道要用作用户的类.设置自定义类后,您可以覆盖RegistrationFormType以包含自定义字段.
但是,如果您仍希望在应用程序中使用两个单独的实体,我建议您通过One-To-One relationship连接它们,然后通过将关于embedding a single object的文档嵌入到表单中,将您的公司实体嵌入到RegistrationFormType中.
参考:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.2.0/Resources/doc/overriding_forms.md