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

How to create 3 roles with 3 entities?

我现在正在开发一个网络应用程序,我想为 3 个实体(学生、教师、学校)创建 3 个角色。

当用户点击题词时,他被重定向到第一步,他可以在学生、教师或学校的 3 个选项(3 个单选框)之间进行选择,确认后,他被重定向到另一个包含不同表格的页面输入取决于第一步。

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

在第一步的控制器中根据无线电值决定重定向到哪里:

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

FOSUserBundle 使得添加角色变得容易,因为 BaseUser class 有一个添加角色的方法:$user->addRole("ROLE_STUDENT");

角色名称必须以 ROLE_ 开头,并且必须全部大写,您可以创建任意多个

编辑:

角色只是存储在用户 class 中的 $roles 字段中的字符串值,然后您可以在需要时要求特定角色访问 security.yml 文件中的特定页面访问需要角色的页面,symfony 将检查该字段以查看用户是否具有所需的角色

您可以创建三个 classes:Student、Teacher 和 School,并让每个人都有一个名为 $account 的字段,这是 FOSUserBundle 和 [=47= 中的默认用户 class ] 它们与@ORM\OneToOne 关联并在这 3 个 class 的 FormType 中添加 AccountType,这样在数据库中每个 class 都有一个 table 和每个对象那些 class 被 link 编辑到一个帐户,所有帐户都存储在一个 table

第一步让用户选择一个角色,然后网站根据他的选择将他引导到学生注册、教师注册或学校注册,在他们的控制器中不要忘记使用 ->addRole( "your role"),示例:$student->getAccount->addRole("ROLE_STUDENT");

我有一个项目,我有一个 Person 实体和 Account 实体(这是默认的 FOSUserBundle 用户 class),注册是由 PersonType 而不是 AccountType 完成的,因为我不能'在提交默认的 FOSUserBundle 注册表单后添加我想要的角色(出于简单原因,我不想修改处理注册的 FOSUserBundle 控制器)

查看我问过的这个问题:

协会解释如下:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html

角色解释如下:http://symfony.com/doc/current/security.html

您可以将 FOS 用户 class 扩展为学校、教师、学生。然后,您可以在会话中存储用户选择,最后根据您通过这些步骤获得的数据构建足够的用户。但是,如果需要,您可以使用一些巧妙的前端魔术或 ajax 调用 return 基于数据的新表单,在同一页面上执行所有这些单独的步骤。如果你问我,越简单越好。例如,您在角色 select 上创建一个对象,并在接下来的每个步骤中更新它。