我有不同的布局,具体取决于用户。这会触发以下错误:
"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
和userTwo
权限,以防有人对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" %}
答案 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 %}