在尝试将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
列表项能够处于活动状态吗?
答案 0 :(得分:2)
您可以查看KnpMenuBundle
。通过管理控制器/视图层中的路径,它可以节省大量工作。
在这里你可以找到带有引导程序的KnpMenu integartion:https://gist.github.com/nateevans/9958390
KnpMenuBundle:http://symfony.com/doc/current/bundles/KnpMenuBundle/index.html