如何使用3个实体创建3个角色?

时间:2017-04-17 21:16:39

标签: php symfony bundle fosuserbundle

我正在开发一个Web应用程序,我希望为3个实体(学生,老师,学校)创建3个角色。

当用户点击题字时,他被重定向到第一步,他可以在3个选项(3个收音机盒)中选择学生,老师或学校,在确认后,他被重定向到另一个页面,其中包含具有不同输入的表格在第一步。

如何使用Symfony 3做到这一点?我可以使用ForUserBundle吗?

2 个答案:

答案 0 :(得分:0)

在第一步的控制器中,根据无线电值决定重定向的位置:

$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
    if( studentRadio is selected ){
        $this->render("student.html.twig")
    } else if (...) {
        ...
    }
    ....
}

FOSUserBundle可以轻松添加角色,因为BaseUser类有一个添加角色的方法:$ user-> addRole(“ROLE_STUDENT”);

角色名称必须以ROLE_开头,且必须全部为大写,您可以根据需要创建任意数量

编辑:

角色只是存储在User类中$ roles字段中的字符串值,那么当您要访问需要角色的页面时,您可以要求某个角色访问security.yml文件中的某些页面, symfony将检查该字段以查看用户是否具有所需的角色

您可以创建三个类:Student,Teacher和School,并且每个类都有一个名为$ account的字段,它是FOSUserBundle的默认User类,并将它们与@ORM \ OneToOne关联链接,并在FormType中添加AccountType那3个类,这种方式在数据库中每个类都有一个表,并且这些类的每个对象都链接到一个帐户,所有帐户都存储在一个表中

在第一步让用户选择一个角色,然后网站根据他选择的内容指导他进行学生注册,教师注册或学校注册,在他们的控制器中不要忘记使用 - > addRole(“你的角色“),例如:$ student-> getAccount-> addRole(”ROLE_STUDENT“);

我有一个项目,我在哪里工作,我有一个Person实体与Account实体(这是默认的FOSUserBundle用户类),注册是由PersonType而不是AccountType完成,因为我无法添加我想要的角色提交默认FOSUserBundle的注册表后(我不想修改FOSUserBundle的控制器,为了简单起见处理注册)

看看这个问题,我问过这个问题:Symfony fosuserbundle add Account entity to a person entity

此处说明了关联:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html

此处解释了角色:http://symfony.com/doc/current/security.html

答案 1 :(得分:0)

您可以使用School,Teacher,Student扩展FOS User类。然后,您可以在会话中存储用户选择,最后只需从您通过这些步骤获得的数据中构建适当的用户。但是,您可以使用一些聪明的前端魔术或ajax调用在同一页面上完成所有这些单独步骤,如果需要,可以根据数据返回新表单。如果你问我,越简单就越好。例如,您在角色选择上创建一个对象,并在接下来的每个步骤中更新它。