Symfony 4 如何设置在树枝中使用的全局参数

Symfony 4 how to set a global parameter for use in twig

我能够从我的控制器设置一个参数,可以在 twig 中访问该参数以确定用户是否在管理区域或不显示额外的菜单。

所以也许我有一个管理员控制器,在承包商内部我将 bool 参数设置为 true 作为管理员:

$this->isAdminArea = true;

然后在模板中我需要一个 if:

{% if isAdminArea %}

{% endif %}

其他控制器要么设置 $this->isAdminArea =false,要么以某种方式将其默认设置为 false。

我怎样才能做到这一点?

您可以按照 Symfony documentation:

中所述在配置中定义一个全局 twig 变量
# config/packages/twig.yaml
twig:
    # ...
    globals:
        isAdminArea: false

然后在需要时在您的控制器中覆盖它 true

在您的特定情况下,也可以使用 default or defined Twig 过滤器

直接设置默认值
{% if isAdminArea|default(false) %}

{% endif %}
{% if isAdminArea is defined %}

{% endif %}

在后一种情况下,将其设置到管理控制器中的值并不重要,甚至 false 也可以完成这项工作,这可能有悖常理。

使用过滤器的优点是可以将所有相关位保留在同一个位置,因此除非您在多个模板中进行相同的检查,否则应该考虑更多 readable/maintainable 解决方案。