我有一个显示 4 个链接的菜单块。如果用户具有特定角色,我想删除最后一个。
菜单块是在特定的树枝文件中创建的,并在宏内部,如下所示:
{% import _self as menus %}
{#
We call a macro which calls itself to render the full tree.
@see http://twig.sensiolabs.org/doc/tags/macro.html
#}
{{ menus.menu_links(items, attributes, 0) }}
{% set role = user.role %}
{% macro menu_links(items, attributes, menu_level, elements) %}
{% import _self as menus %}
{% if items %}
<span class='arrow-down'></span>
<ul{{ attributes.setAttribute('id', 'edit-profil-nav') }}>
{% for item in items %}
{% set item_classes = [
'col-xs-12',
'col-sm-12',
items|length == 3 ? 'col-md-4' : 'col-md-3',
item.in_active_trail ? 'active' : 'notactive',
] %}
<li{{ item.attributes.addClass(item_classes) }}>
{{ link(item.title, item.url) }}
</li>
{% endfor %}
</ul>
{{ attach_library('cnas/responsive-navigation') }}
{% endif %}
{% endmacro %}
我遇到的主要问题是我无法干扰宏:我希望能够与
user
变量进行比较,但是当我在宏中转储它时,user
显示 null .
在寻找答案时我发现了很多东西,但我已经看到了一切及其相反,所以我想知道我是否可以做到这一点,以及如何做到
非常感谢!
macro's
中的 twig
有自己的范围。您需要将变量 user
作为参数传递给宏才能访问它。
{% macro menu_links(user, items, attributes, menu_level, elements) %}
{# .... #}
{{ dump(user) }}
{% endmacro %}
_context
传递给宏。
该变量保存您传递给模板的所有变量。
{% macro foo(variables) %}
{{ variables.foo }}
{% endmacro %}
{% import _self as macros %}
{{ macros.foo(_context) }}