3

我有不同的布局,具体取决于用户。这会触发以下错误: "Multiple extends tags are forbidden"。如何根据用户的角色设法使用不同的布局?

{% if is_granted('ROLE_USER_ONE') %}

{% extends "AcmeUserBundle::layout_user_one.html.twig" %}

{% elseif is_granted('ROLE_USER_TWO') %}

{% extends "AcmeUserBundle::layout_user_two.html.twig" %}

{% endif %}

编辑

这是答案。我将使用 3 个用户的情况,以防人们想知道如何做到这一点。在这种情况下,如果有人想知道该声明,admin也有userOne特权。我在这种情况下使用,但正如其中一个答案所建议的那样,可能更具可读性。userTwoelseConditional InheritanceDynamic Inheritance

{% set admin = false %}

{% set userOne = false %}

{% set userTwo = false %}

{% if is_granted('ROLE_ADMIN') %}

    {% set admin = true %}

{% else %}

    {% if is_granted('ROLE_USER_ONE') %}

        {% set userOne = true %}

    {% elseif is_granted('ROLE_USER_TWO') %}

        {% set userTwo = true %}

    {% endif %}

{% endif %}

{% extends admin ? "AcmeUserBundle::layout_admin.html.twig" : userTwo ? "AcmeUserBundle::layout_user_two.html.twig" : "AcmeUserBundle::layout_user_one.html.twig" %}
4

2 回答 2

7

查看文档中的条件继承部分。

如果您需要两个以上的选项,请参阅动态继承部分:

{% set parent = 'defaultLayout.html.twig' %}
{% if is_granted('ROLE_USER') %}
    {% set parent = 'userLayout.html.twig' %}
{% elseif is_granted('ROLE_ADMIN') %}
    {% set parent = 'adminLayout.html.twig' %}
{% endif %}

{% extends parent %}
于 2012-08-01T06:40:47.273 回答
1

你应该有两个不同的模板

#user_one.html.twig
{% extends "AcmeUserBundle::layout_user_one.html.twig" %}

#user_two.html.twig
{% extends "AcmeUserBundle::layout_user_two.html.twig" %}

然后你应该有一个“入口”点 - some user.html.twig,你将在其中决定:

#user.html.twig
{% if is_granted('ROLE_USER_ONE') %}
    {% include "AcmeUserBundle::user_one.html.twig" %}
{% elseif is_granted('ROLE_USER_TWO') %}
    {% include "AcmeUserBundle::user_two.html.twig" %}
{% endif %}
于 2012-08-01T06:26:52.623 回答