如何克服Symfony2/PHP中的乘法代码

如何克服Symfony2/PHP中的乘法代码,php,html,symfony,Php,Html,Symfony,我写的网站使用Symfony2框架,我得到了问题。我想制作导航栏,它在每个子页面上都是可见的,我想知道是否有任何方法可以实现它,而不必为每个页面模板乘以相同的代码 这是我现在在base.html.twig中看到的内容: {% block navigationBar %} <ul class="topnav"> <li><a class="active" href="/">Main page</a></l

我写的网站使用Symfony2框架,我得到了问题。我想制作导航栏,它在每个子页面上都是可见的,我想知道是否有任何方法可以实现它,而不必为每个页面模板乘以相同的代码

这是我现在在
base.html.twig
中看到的内容:

{% block navigationBar %}
        <ul class="topnav">
            <li><a class="active" href="/">Main page</a></li>
            <li><a href="/news">News</a></li>
            <li><a href="/contact">Contact</a></li>
            <ul class="topnav right";style="float:right;list-style-type:none;">
                <li><a href="/info">About</a></li>
                <li><a href="/login">Login</a></li>
            </ul>
        </ul>
{% endblock %}
如果用户单击此元素,则应相应设置参数
active
s。例如,如果我想进入
新闻
子页面,我必须在模板中编写
,该模板负责给定页面


我是PHP和HTML编程新手,所以如果可以的话,请用easts的方式解释一下。谢谢

在细枝中使用
macro
是一种很酷的方法:

{# ::macro.twig #}
{% macro navbar(route) %}
{% set path, active = route|default('/'), ' class="active"' %}
<ul class="topnav">
    <li><a href="/"{{ '/' is sameas(path) ? active }}></li>
    <li><a href="/news"{{ '/news' is sameas(path) ? active }}>News</a></li>
    <li><a href="/contact"{{ '/contact' is sameas(path) ? active }}>Contact</a></li>
    <ul class="topnav right" style="float: right; list-style-type: none;">
        <li><a href="/info"{{ '/info' is sameas(path) ? active }}>About</a></li>
        <li><a href="/login"{{ '/login' is sameas(path) ? active }}>Login</a></li>
    </ul>
</ul>
{% endmacro %}

请参阅

我将使用
KnpMenuBundle
进行调查,您可以从request
app.request.attributes.get(“u route”)获取路由,如果您通过路径设置链接:

{# ::macro.twig #}
{% macro navbar(route) %}
{% set path, active = route|default('/'), ' class="active"' %}
<ul class="topnav">
    <li><a href="/"{{ '/' is sameas(path) ? active }}></li>
    <li><a href="/news"{{ '/news' is sameas(path) ? active }}>News</a></li>
    <li><a href="/contact"{{ '/contact' is sameas(path) ? active }}>Contact</a></li>
    <ul class="topnav right" style="float: right; list-style-type: none;">
        <li><a href="/info"{{ '/info' is sameas(path) ? active }}>About</a></li>
        <li><a href="/login"{{ '/login' is sameas(path) ? active }}>Login</a></li>
    </ul>
</ul>
{% endmacro %}
{# ::base.html.twig #}
{% import 'macro.twig' as macro %}
{% block navigationBar %}
    {{ macro.navbar(app.request.attributes.get('_route')) }}
{% endblock %}