在Symfony中激活的引导程序导航

时间:2016-03-11 11:26:22

标签: twitter-bootstrap symfony twig

在尝试将Bootstrap包含到我的项目中之后,我遇到了一些导航问题。

目前我的导航如下:

<div id="navbar" class="navbar-collapse collapse">
  <ul class="nav navbar-nav">
    {# something to do here: #}
    <li {% if currentRoute == "home" %} class="active"{% endif %}><a href="{{ path('home') }}">Home</a></li>
    <li {% if currentRoute == "movies" %} class="active"{% endif %}><a href="{{ path('movies') }}">Movies</a></li>
    <li class="dropdown">
      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
      <ul class="dropdown-menu">
        <li><a href="#">Action</a></li>
        <li><a href="#">Another action</a></li>
        <li><a href="#">Something else here</a></li>
        <li role="separator" class="divider"></li>
        <li class="dropdown-header">Nav header</li>
        <li><a href="#">Separated link</a></li>
        <li><a href="#">One more separated link</a></li>
      </ul>
    </li>
  </ul>
  <ul class="nav navbar-nav navbar-right">
    <li><a href="../future-feature/">Future feature</a></li>
  </ul>
</div><!--/.nav-collapse -->

我应该为每个控制器添加$currentRoute = $request->get('_route');,并为每个{% if currentRoute == "routeNameGoesHere" %} class="active"{% endif %}标记添加<li>

控制器,例如家:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class HomeController extends Controller
{
    public function indexAction(Request $request)
    {
        $currentRoute = $request->get('_route');
        // replace this example code with whatever you need
        return $this->render('website/homepage.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..'),
            'currentRoute' => $currentRoute,
        ]);
    }
}

但是我想清除它,也许为我的布局模板制作一个单独的控制器,但这就是我的想法:我可以在Symfony中为布局模板制作一个控制器来处理Bootstrap导航吗?或者处理这种情况最常用的方法是什么? (代码工作得很好,只是我认为应该有一种更简单的方法来编写这段代码)。

修改:我发现只要我在上面给出的示例中转到网址~/home/othercontroller,我的浏览器就会返回:Variable "currentRoute" does not exist in base.html.twig at line...。有一种方法,当我在前面包含home的目录/路由(home)时,我仍然可以使~/home/othercontroller列表项能够处于活动状态吗?

1 个答案:

答案 0 :(得分:2)

您可以查看KnpMenuBundle。通过管理控制器/视图层中的路径,它可以节省大量工作。

在这里你可以找到带有引导程序的KnpMenu integartion:https://gist.github.com/nateevans/9958390

KnpMenuBundle:http://symfony.com/doc/current/bundles/KnpMenuBundle/index.html