php – 来自其他实体的注册表单中的FOSUserBundle属性

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

上一篇:spring beans Context配置


下一篇:NEXUS 5为驱动硬件抽象层添加服务