我使用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>
(/家/西蒙/服务器/ HTML /门户/应用/资源/ FOSUserBundle /视图/注册/ 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 %}
(/家/西蒙/服务器/ HTML /门户/应用/资源/ FOSUserBundle /视图/ 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值
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
问题是您的变量不属于您尝试访问的当前范围。这意味着您在以下块中定义了变量:
{% block fos_user_content %}{% endblock %}
..它可能无法在模板中其他位置的菜单块中使用。
当您以后尝试访问该变量时,它已经消失(超出范围)。你能做的就是使用这个方便的功能:
默认情况下,块可以访问外部作用域(http://twig.sensiolabs.org/doc/tags/extends.html)
中的变量
在主布局中或在相对于当前模板变为全局的任何位置定义变量:
{% extends 'MyBundle::layout.html.twig' %}
{% block content %}
{#
I did it here but you can really set it anywhere. The point is:
From now on the variable exists and will only be deleted when the
content block closes.
#}
{% set hightlighted_section = '' %}
{% block fos_user_content %}{% endblock %}
{% endblock %}
我不知道您的确切用例,但在此示例中,您可以在FOSUserBundle内容文件中的任何位置设置变量,并在内容块结束之前使用它。如果这还不够,请定义 它在更高的层次上。如果您在菜单中说需要它,请尝试在菜单块上设置一个块。
关键在于它被定义的地方..而不是你设置的地方。