symfony - 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.
会针对用户拥有的每个角色显示,无论是哪个角色。我究竟做错了什么?
解决方案
作为对您自己发布的答案的回答:单个角色不是数组,包含运算符(请参阅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 %}
推荐阅读
- swiftui - 关闭最后一个窗口时关闭 SwiftUI 应用程序
- react-native - React Native Navigation 5 中的自定义图像
- azure - 如何连续收听 Azure 服务总线主题?
- python - 使用 PyGithub API 时出现错误“'Repository' object has no attribute 'create_deployment'”
- node.js - 使用 AND OR 在 mongodb 中搜索查询
- .htaccess - PhpStorm - 无法访问指定的 URL,原因是:“请求失败,状态码 404”
- string - 如何从文件名中删除除括号内容之外的所有内容
- ruby-on-rails - Ruby on rails next 按钮链接到下一个位置编号
- javascript - 如何使用 javascript 展开和折叠模板手风琴?
- r - 如何在我*不*在 lm 调用本身中使用的 R 中的 lm() 的 fit$model 中保留一个变量?