0

我想使用 FOS USerBundle,但我有不同类型的用户(学生、教师、导演等)可以登录到我的应用程序。然后每个都有不同的属性,每个属性都是唯一的。

如我所见,我有一些选择:

选项 1-拥有一个继承 FOS\UserBundle\Entity\User 的用户实体(并在 config.yml 中设置为 FOS UserBundle 的 user_class),并具有由 ROLE 区分的不同类型用户的所有属性。我特别不喜欢这个选项,因为每次用户登录系统时,用户实体都会有很多 null 属性(只有登录类型的用户的属性会有值,其余属性(几乎在那里)将不被使用。

选项 2-要拥有一个继承 FOS\UserBundle\Entity\User 的用户实体(并在 config.yml 中设置为 FOS UserBundle 的 user_class),为应用程序中的每个参与者(学生、教师、导演等)创建一个实体具有 OneToOne 与 User 实体的关系。这样,每次用户登录时,我都可以说:$logguedUser->getStudent() 或 $logguedUser->getTeacher() 等,具体取决于登录的用户类型。

选项 3-要让用户实体继承 FOS\UserBundle\Entity\User,请为应用程序中的每个参与者(学生、教师、导演等)创建一个实体,并且每个实体都从用户继承。这是我在理论上看到的更好的选项,但我无法确定如何实现它,因为我需要在配置中说 FOS UserBundle 是 user_class,然后我会选择其中的一些(学生、客户、主任等) . 当演员登录应用程序时,我将登录哪个对象?

有没有人有更好的选择,或者实现第三个的方法,或者可能支持一个?发送

4

1 回答 1

0

第一个选项适合懒惰的程序员,第三个不好,因为你没有太多兴趣区分用户类型的访问,你还需要过度配置。

我个人支持2,因为继承不能解决所有问题,不断发展的应用程序并不意味着学生不能成为老师或可能有其他角色(或多个角色),然后继承就变成了笼子,你可以做一些OneToOne 关系,Doctrine 会做剩下的。

有一个选项 4 :)原则仍然允许一些关于继承映射的解决方案,如果你想使用继承,单表继承可以为你做

于 2013-09-06T17:53:13.947 回答