在Symfony 4中,我有几个不同的角色。我在Twig中有一个显示用户列表的视图。用户可以具有多个角色。在列表中,如果用户具有“ MANAGER”角色,我想显示一些文本。显示所有角色的步骤是:
{% for role in user.roles %}
{{ role }}
{% endfor %}
现在,如果用户具有“ MANAGER”角色,我想显示一些文本。我尝试过:
{% for role in user.roles %}
{% if (role is "MANAGER") %}
Show some text.
{% endif %}
{% endfor %}
但这会返回错误
值为“ MANAGER”的意外令牌“ string”(应为“ name”)。
当我使用{% if is "MANAGER") %}
且出于某种原因而使用{% if "MANAGER") %}
时,会显示相同的错误,无论用户是哪个角色,都为用户具有的每个角色都显示Show some text.
。我究竟做错了什么?
答案 0 :(得分:1)
作为对您自己发布的答案的回答:单个角色不是数组,包含运算符(请参阅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”测试,请参见{{ 3}}
{% for role in user.roles %}
{% if role is same as("MANAGER") %}
Some text here.
{% endif %}
{% endfor %}
答案 1 :(得分:0)
所以看来我已经知道了。似乎每个角色实际上都是一个数组,因此您必须像这样检查数组中的值:
{% for role in user.roles %}
{% if "MANAGER" in role %}
Some text here.
{% endif %}
{% endfor %}
我仍然不确定为什么单个角色是数组,但是肯定有一个原因。
答案 2 :(得分:0)
那呢?
{% if is_granted('ROLE_MANAGER') %}
Some text here
{% endif %}
来源:Symfony2 security functions in Twig? How to check the user's role?
角色:用户登录后,会收到一组角色(例如, ROLE_ADMIN)。