首页 > 解决方案 > Twig:如果用户在用户列表中有角色X(不是当前用户),则显示某些内容。

问题描述

在 Symfony 4 中,我有几个不同的角色。我在 Twig 中有一个显示用户列表的视图。用户可以有多个角色。在列表中,如果用户具有“经理”角色,我想显示一些文本。显示所有角色是通过以下方式完成的:

{% for role in user.roles %}
    {{ role }}
{% endfor %}

现在,如果用户具有“经理”角色,我想显示一些文本。我试过了:

{% for role in user.roles %}
    {% if (role is "MANAGER") %}
        Show some text.
    {% endif %}
{% endfor %}

但这会返回错误

值“MANAGER”的意​​外令牌“字符串”(应为“名称”)。

当我使用时会显示相同的错误,{% if is "MANAGER") %}并且当我 {% if "MANAGER") %}出于某种原因使用时,Show some text.会针对用户拥有的每个角色显示,无论是哪个角色。我究竟做错了什么?

标签: symfonytwig

解决方案


作为对您自己发布的答案的回答:单个角色不是数组,包含运算符(请参阅https://twig.symfony.com/doc/2.x/templates.html#containment-operator)支持检查子字符串同样,这就是这里发生的事情。

所以你检查作品,但如果你有例如角色“MINI_MANAGER”,可能会有误报,例如

{% set role = "MINI_MANAGER" %}
{% if "MANAGER" in role %}
    Some text here.
{% endif %}

还将输出“这里有一些文本。”。所以更好的解决方案是:

{% for role in user.roles %}
    {% if role == "MANAGER" %}
    Some text here.     
    {% endif %}
{% endfor %}

当角色为布尔值“true”时,这仍然可能导致问题(这不是 Twig 问题,而是正常的 PHP 行为),因此您还可以查看“same as”测试,请参阅https://twig .symfony.com/doc/2.x/tests/sameas.html

{% for role in user.roles %}
    {% if role is same as("MANAGER") %}
    Some text here.     
    {% endif %}
{% endfor %}

推荐阅读