【问题标题】:Symfony 2 get defined roles in a custom form field typeSymfony 2 在自定义表单字段类型中获取定义的角色
【发布时间】:2024-05-02 19:40:02
【问题描述】:

在我的项目中,我希望管理员能够更改所需的角色以使用选择字段查看某些内容。 我有一个为我构建表单的 ArticleType:

class ArticleType extends AbstractType
{   
    ...

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title')
                ->add('requiredRole', 'choice');

    }

    ...
}

我也想翻译角色。例如,“ROLE_ADMIN”被翻译为“Admins”。 因为我也需要一些不同形式的这个函数,所以我认为创建一个自定义表单字段类型会是一个很好的解决方案。

但是我遇到的问题是我无法访问定义的角色。

我让它在没有自定义字段类型的情况下在控制器中工作

$form = $this->createForm(new ArticleType($this->container->getParameter('security.role_hierarchy.roles')), $article);

这在 ArticleType 中

class ArticleType extends AbstractType
{   
    ...

    private $roles;

    public function __contruct($roles)
    {
        $this->roles = $this->refactorRoles($roles);
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title')
                ->add('requiredRole', 'choice', array('choices' => $this->roles);

    }

    ...
}

但是使用这个解决方案,我必须在每个类型中包含 refactorRoles 函数,我需要角色字​​段,当我添加或重命名角色时,我必须再次更改每个类型。

所以我的问题是,如何创建自定义角色类型才能访问定义的角色并翻译它们? 另外,这是个好主意还是我应该做一些不同的事情?

【问题讨论】:

    标签: forms symfony roles


    【解决方案1】:

    好吧,您不一定需要这样做。更好的做法可能是创建一个角色实体,添加相应角色的前端名称 (Admin) 和后端值 (ROLE_ADMIN),并创建与 Article 实体的一对多关联。然后,您可以直接在表单类型文件的构建器中使用实体字段(= 实体的选择字段),并且可以指定应显示的属性(您需要前端名称)。 要显示一篇文章,您需要查询连接这些表,并从那里检查用户的角色与文章最小角色的后端值。

    Doctrine ORM 的一个优点是一旦你习惯了这些事情就会变得微不足道。

    【讨论】:

    • 这可能很愚蠢,但我不太明白你的解决方案。您将创建一个包含每个角色的前端名称和后端值的实体并从中生成一个表?或者您会使用没有表的实体,但会生成一个包含__construct() 函数中的名称和值的数组?编辑:实体必须有一张桌子,所以我猜它是第一个吧?
    最近更新 更多