Symfony2在Twig中获取用户角色

hen*_*ra1 6 user-roles symfony twig

我有一个问题,

如何在Symfony2 Twig中获得用户角色.

我曾四处寻找,但我找不到它.

请帮忙,或线索..

谢谢你.

叶诚万

Iva*_*ele 21

一个更简单的选项可能是测试角色,因为你必须在security.yml中定义它们:

{% if is_granted('ROLE_ADMIN') %}
    Administrator
{% elseif is_granted('ROLE_USER') %}
    User
{% else %}
    Anonymous
{% endif %}
Run Code Online (Sandbox Code Playgroud)


Pra*_*esh 8

您可以编写一个Twig扩展来完成此任务.

创建一个枝条扩展并将其注册为服务.

  1. services.yml

    services:
      cms.twig.cms_extension:
        class: Path\To\RolesTwigExtension.php
        tags:
          - { name: twig.extension }
        arguments: ["@service_container"]
    
    Run Code Online (Sandbox Code Playgroud)
  2. RolesTwigExtension.php

    use Symfony\Component\Security\Core\User\UserInterface;
    
    class RolesTwigExtension extends \Twig_Extension {
        public function getFilters() {
            return array(
                new \Twig_SimpleFilter('getRoles', [$this, 'getRoles']),
            );
        }
    
        public function getName() {
            return 'roles_filter_twig_extension';
        }
    
        public function getRoles(UserInterface $user) {
            return $user->getRoles();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在你的twig文件中:

    <ul>
        {% for key, value in app.user|getRoles %}
            <li>{{ value.name }}</li>
        {% endfor %}
    </ul>
    
    Run Code Online (Sandbox Code Playgroud)


Moh*_*far 1

您可以使用访问整个安全令牌app.security.token。也是rolestoken的一个属性。

{{ dump(app.security.token.roles) }}
Run Code Online (Sandbox Code Playgroud)