当前位置: 首页 > 知识库问答 >
问题:

Symfony 2访问formtype的实体数据

吉泰宁
2023-03-14

我正在用Symfony2制作自己的登录应用程序,我是Symfony的新手。我知道我有FOSUserBundle可供使用,但我首先要自己学习安全性。

我的权限改造定义了3个角色:ROLE_SUPER_ADMIN、ROLE_ADMIN和ROLE_USER。此外,定义的角色还有其他与之关联的角色,例如ROLE_ADMIN_VIEW_USERS

我没有在entity.roles上使用security.context服务来映射实体中的角色,因为我只想影响角色\管理员和角色\用户。注册后,每个用户都被授予角色\用户。当角色为超级管理员的用户查看某个用户或管理员的编辑页面时,我试图在复选框中输入“使该用户成为管理员”。如果实体getRoles中已经有ROLE_ADMIN,则会选中该框。

如果框被选中,我在行动中这样做

    if ($editForm->isValid()) {
            $role = ( 'ROLE_ADMIN' === $editForm->get('role')->getViewData())
                    ? "ROLE_ADMIN"
                    : "ROLE_USER";
            $entity->setRoles(array($role));
            $em->flush();

            return $this->redirect($this->generateUrl('admin_new_edit', array('id' => $id)));
        }

所以我的问题是:如果在实体getRoles()中ROLE_ADMIN,我如何检查该框?请记住,如上所述,角色在实体中被映射,但角色不是。我不想使用映射实体中的角色,因为安全服务中有几个值我不想使用。

    $builder
        ->add('username', 'text')
        ->add('password', 'password')
        ->add('email', 'email')
        ->add('role', 'choice', array(
            'mapped' => false,
            'label' => 'Make Admin',
            'value' => 'ROLE_ADMIN',
            'required' => false,
            //show following attribute only if entity getRoles is ROLE_ADMIN
            //how do i get the value from the entity?
            'attr' => array('checked'=>'checked'),
            ))

共有1个答案

东方夕
2023-03-14

我的建议是这样的:

->add('role', 'choice', array(
            'mapped' => true,
            'label' => 'Make Admin',
            'multiple' => true,
            'expanded' => true,
            'choices' => array('ROLE_ADMIN' => 'Yes')
            'required' => false,
            ))

如果实体具有名为“角色”的属性,则该值应自动从实体中获取,就像其他字段一样。您还可以将其他角色添加到“选择”数组中,并将为每个角色设置一个复选框。

我没有测试它,但是,我希望它的工作。

 类似资料:
  • 实际开发项目的时候,可能会加载外部模型,有些时候需要获取模型几何体的顶点数据,如果想获取几何体的顶点数据首先要熟悉three.js几何体BoxGeometry和BufferGeometry的结构。 访问几何体顶点数据其实很简单,刚开始学习不用刻意记忆,直接查看threejs文档,就像访问javascript对象的属性一样。 测试BoxGeometry 调用BoxGeometry创建一个立方体,执行

  • 问题内容: 好的,这是一个新手问题,但我在任何地方都找不到答案。在Symfony2中的控制器中,我想从我的一个表单中访问POST值。在控制器中,我有: 不幸的是没有返回任何东西。我究竟做错了什么?谢谢! 问题答案: 此解决方案从2.3开始弃用,并将在3.0中删除,请参阅文档 给你一个数组的形式参数 摘自symfony2书第162页(第12章:表格) […]有时,您可能只想使用没有类的表单,并取回已

  • 我在Symfony2中有REST API,在AngularJS中有客户端应用。我有用户,用户有Symfony2角色(ROLE_ADMIN,ROLE_USER)。 在security.yml是部分,但在这里我只能设置Symfony2路由路径。 如何阻止对路径的访问,例如: 对于角色为_USER或匿名的用户? (#/某物-是Angular url)

  • 对于我的另一个实体类 这是我的数据库表的脚本,它是一个Postgres数据库 当我的服务器运行时,我会收到以下错误消息 我会很感激你帮我的忙的。

  • 我的问题是关于创建实体集合的。我知道“如何嵌入收集表单”,并成功地使用了它。但在这种情况下,我有: 简单类 文体词典 我不需要为DicStyle对象创建表单,因为这是只读对象=字典(不可更改)。所以,我想创建一个类似这样的表单: 当然是伪代码。我无法想象如何实施它。 结果 假设我有: 表“Thing”有一行(id=1)。 在表单中,我为这个东西选择了两个DicStyle(id=3,id=5)。因此

  • 也许问题的标题写得不好,但我不明白我还能写些什么。 我想了解,为什么下面两个案例中的第一个能起作用,以及在总体实现相同的情况下,如何让第二个也能起作用。 从代码的角度来看,什么样的原则使第一个按原样工作,也就是说,扩大了可以使用的变量的范围,所以我可以了解更多。 我想访问onclick侦听器中的'obj'变量。 案例1 案例2 我的onclicklistener只接受带有onClick方法的接口,