我的layout.html.twig
:
{{ render(controller('AcmeDemoBundle:Page:mainmenu')) }}
Page
控制器从Doctrine中检索所有页面,并使用一组页面呈现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
类。据我所知,问题出在内部路由上。如何解决?
答案 0 :(得分:6)
最好不要使用{{ render(controller('AcmeDemoBundle:Page:mainmenu')) }}
。当您使用services时,它的工作速度更快,更舒适。您可以创建一个服务,该服务将在您包含它们的任何页面上显示菜单。在服务中,您可以轻松访问当前_route
以添加active
类。
但如果您确实需要使用{{ 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 %}