我想使用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),为应用程序中的每个actor创建一个实体(Student,Teacher,Director)等等,具有OneToOne与User实体的关系。 通过这种方式,每次用户登录时,我都可以说:$ logguedUser-> getStudent()或$ logguedUser-> getTeacher()等,具体取决于所记录的用户类型。
选项3 - 要让用户实体继承FOS \ UserBundle \ Entity \ User,为应用程序中的每个actor(学生,教师,导演等)创建一个实体,并且每个实体都从User继承。这是我在理论上看到的更好的选项,但是我无法想象如何实现它,因为我需要说配置中的FOS UserBundle是user_class,我会讨论一些(学生,客户,导演等) 。当一个演员登录应用程序时,我将记录哪个对象?
有没有人有更好的选择,或者实施第三种方式,或者可能支持一种方式? TX
答案 0 :(得分:0)
第一个选项适用于懒惰程序员,第三个选项并不好,因为您没有兴趣区分用户类型的访问权限,还需要进行过度配置。
个人我是2,因为继承不能解决所有问题,不断发展的应用程序并不意味着学生不能成为教师或者可能有其他角色(或多个角色),然后继承就变成了笼子里,你可以做一些OneToOne relations,而Doctrine会做其余的事。如果你想使用继承,有一个选项4 :) doctrine still allows some solutions about inheritance mapping和单表继承可以为你做什么