php - Symfony2 Twig 渲染函数中的内部路由

标签 php symfony doctrine-orm routes twig

我的layout.html.twig:

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

Page Controller 从 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类。据我了解,问题出在内部路由上。如何解决这个问题?

最佳答案

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

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

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

然后在操作中将请求传递给twig:

public function mainmenuAction($request) {

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

并在twig中使用此请求:

{% 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 %}

关于php - Symfony2 Twig 渲染函数中的内部路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21427321/

相关文章:

php - 管理数据库中多种类型产品的付款

php - 在删除所有单词后重定向到主 url 等? (问号)

javascript - 如何在模态中传递 php 值? Bootstrap 3,

symfony - 如何在 Symfony2 的监听器中获取 %secret% 参数?

symfony - 如何使用symfony在实体类中调用学说

mysql - 如何在 Doctrine2 中获取与其他实体相关的 2 个实体

php - 从文本行返回 ip 地址的正则表达式

php - Symfony 无法为池分配内存

php - 使用 Native SQL 的 Doctrine 查询总是返回空数组

mongodb - ZF2、学说-mongodb 和 PHP7