我使用Symfony2框架和FOSUserBundle . 我通过覆盖一些FOSUserBundle模板来修改布局 . 这非常有效!唯一的问题是我无法在我的模板中设置变量来扩展FOSUserBundle中被我自己的模板覆盖的模板 . 难以描述,但我尝试一下:
我重写了这样的Registration / register_content.html.twig:
{% trans_default_domain 'FOSUserBundle' %}
{% set section='register' %}
<h1>{{ 'Anmeldung'|trans }}</h1>
<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST">
{{ form_widget(form) }}
<div>
<input type="submit" value="{{ 'registration.submit'|trans }}" />
</div>
</form>
(/home/simon/server/html/portal/app/Resources/FOSUserBundle/views/Registration/register_content.html.twig)
关键是我想为我的bundle的layout.html.twig设置section变量以突出显示菜单中的当前部分 . 这适用于我的常规模板(不会被FOSUserBundle覆盖)
我还覆盖了FOSUserBundle中的layout.html.twig:
{% extends 'MyBundle::layout.html.twig' %}
{% block content %}
{% block fos_user_content %}{% endblock %}
{% endblock %}
(/home/simon/server/html/portal/app/Resources/FOSUserBundle/views/layout.html.twig)
如果我在该布局文件中设置我的变量direclty它可以工作 . 但这不是我想要的 .
我该如何解决这个问题?
附加信息:
我的菜单看起来像这样
<ul class="nav nav-pills menu">
{% if section is not defined %}
{% set section = '__dummy_undefined' %}
{% endif %}
<li{% if section == 'home' %} class="active"{% endif %}><a href="{{ path('home') }}"> {{ 'general.home'|trans }}</a></li>
<li{% if section == 'search' %} class="active"{% endif %}><a href="{{ path('search') }}">{{ 'general.search'|trans }}</a></li>
<li{% if section == 'events' %} class="active"{% endif %}><a href="{{ path('events') }}">{{ 'general.calendar'|trans }}</a></li>
<li{% if section == 'register' %} class="active"{% endif %}><a href="{{ path('fos_user_registration_register') }}">{{ 'general.register'|trans }}</a></li>
</ul>
因此,变量在使用之前就已定义 . 该菜单包含在menu.html.twig文件中,该文件包含如下:
{% include 'DancePortalFrontendBundle::headline.html.twig' %}
包含来自{%block content%}永远不会显示! {%endblock%}
但即使我在内容块之后或之内执行include,我也没有得到我在register_content.html.twig中设置的section值
有人知道如何解决这个问题吗?
1 回答
问题是您的变量不属于您尝试访问的当前范围 . 这意味着您要在以下块中定义变量:
..it可能在您的模板中的其他位置的菜单块中不可用 .
当你试图稍后访问该变量时,它已经消失(超出范围) . 你能做的就是使用这个方便的功能:
在主布局中或在相对于当前模板变为全局的任何位置定义变量:
我不知道您的确切用例,但在此示例中,您可以在FOSUserBundle内容文件中的任何位置设置变量,并在内容块结束之前使用它 . 如果这还不够,请在更高级别定义它 . 如果您在菜单中说需要它,请尝试在菜单块上设置一个块 .
关键在于它的定义..而不是你设置的地方 .