symfony2内部路线在树枝渲染函数中



我的 layout.html.twig

{{ render(controller('AcmeDemoBundle:Page:mainmenu')) }}

Page控制器从学说中检索所有页面,并用一组页面渲染mainmenu.html.twig

我的mainmenu.html.twig

{% if menu_pages is defined %}
    {% for page in menu_pages %}
        <li class="{% if app.request.attributes.get('_internal') == '_page_show' and app.request.get('id') == page.id %}active{% endif %}"><a href="{{ path('_page_show', {id: page.id}) }}">{{ page.title|e }}</a></li>
    {% endfor %}
{% endif %}

,但没有显示active类。据我了解,问题在于内部路由。如何解决?

最好不要使用{{ render(controller('AcmeDemoBundle:Page:mainmenu')) }}。当您使用服务时,它更快,舒适。您可以创建一个服务,该服务将在包含它们的任何页面上显示菜单。在服务中,您可以轻松地访问添加active类的当前_route

但是,如果您确实需要使用{{ render(controller('AcmeDemoBundle:Page:mainmenu')) }},因此您需要向他们传递一个当前请求,例如:

{{ render(controller('AcmeDemoBundle:Page:mainmenu', {'request': app.request})) }}

,然后在行动通行证请求到树枝:

public function mainmenuAction($request) {
    return $this->render('AcmeDemoBundle:Page:mainmenu.html.twig', array('request' => $request));
}

在树枝中使用此请求:

{% if menu_pages is defined %}
    {% for page in menu_pages %}
        <li class="{% if request.get('_route') == '_page_show' and request.get('id') == page.id %}active{% endif %}"><a href="{{ path('_page_show', {id: page.id}) }}">{{ page.title|e }}</a></li>
    {% endfor %}
{% endif %}

相关内容

  • 没有找到相关文章

最新更新