树枝中的条件继承

时间:2012-08-01 06:21:53

标签: symfony twig

我有不同的布局,具体取决于用户。这会触发以下错误: "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还具有userOneuserTwo权限,以防有人对else语句感到奇怪。在这种情况下我使用Conditional Inheritance,但正如其中一个答案中所建议的,Dynamic 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" %}

2 个答案:

答案 0 :(得分:7)

查看文档中的Conditional Inheritance部分。

如果您需要两个以上选项,请参阅Dynamic Inheritance部分:

{% 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 %}

答案 1 :(得分:1)

您应该有两个不同的模板

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

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

然后你应该有一个“入口”点 - 一些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 %}