注册表单中的FOSUserBundle属性来自另一个实体


FOSUserBundle properties in registration form from another entity

大家好,

我决定使用FOSUserBundle在我的应用程序中处理用户身份验证。在我的申请中,公司可以注册他们的详细信息(姓名,地址等)。

因此,我决定创建一个名为Company的实体来保存与公司相关的数据,并创建一个名为User的实体来分别保存来自FOSUserBundle的用户数据。

我开始重写默认的注册表单,就像文档重写默认FOSUserBundle表单中描述的那样,但问题是我不能将Company字段添加到表单中,它总是尝试从User实体访问(可能是因为它与FOSUserBundle相关)。

是否有办法将公司实体字段放在FOSUser注册表单中?

我不想通过使用Company作为FOSUser的基本实体并添加所有字段(用户名、电子邮件、密码等)来弄乱数据模型。

问好,

从语义上讲,User不一定是一个人,所以我认为没有理由让公司成为您的应用程序的用户。我也认为没有理由在你的数据库中有两个单独的表。

我将创建一个单独的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知道使用哪个类作为User。在设置了自定义类之后,您可以覆盖RegistrationFormType以包含您的自定义字段。

如果,然而,你仍然希望在你的应用程序中使用两个单独的实体,我建议你通过一对一的关系连接它们,然后按照文档中关于将单个对象嵌入到表单中的Company实体嵌入到RegistrationFormType

参考:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.2.0/Resources/doc/overriding_forms.md