我正在开发一个Web应用程序,我希望为3个实体(学生,老师,学校)创建3个角色。
当用户点击题字时,他被重定向到第一步,他可以在3个选项(3个收音机盒)中选择学生,老师或学校,在确认后,他被重定向到另一个页面,其中包含具有不同输入的表格在第一步。
如何使用Symfony 3做到这一点?我可以使用ForUserBundle
吗?
答案 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
答案 1 :(得分:0)
您可以使用School,Teacher,Student扩展FOS User类。然后,您可以在会话中存储用户选择,最后只需从您通过这些步骤获得的数据中构建适当的用户。但是,您可以使用一些聪明的前端魔术或ajax调用在同一页面上完成所有这些单独步骤,如果需要,可以根据数据返回新表单。如果你问我,越简单就越好。例如,您在角色选择上创建一个对象,并在接下来的每个步骤中更新它。