我想为我的应用创建带有类别的动态导航栏(其中类别来自数据库,用户始终可以添加自己的类别)。我的应用程序中有很多页面,每个页面都有一个控制器方法(比方说)。导航栏显示在每个应用程序页面上,其中包含来自dabatase的动态数据。因此,在每个控制器方法内,我将必须为navbar返回这些类别。
例如:
/**
* @Route("/")
*/
public function firstPage()
{
return $this->render('file.html.twig', [
//... the method's data
'categoriesForNavbar' => $categoriesForNavbar
]);
}
/**
* @Route("/page")
*/
public function secondPage()
{
return $this->render('file2.html.twig', [
//... the method's data
'categoriesForNavbar' => $categoriesForNavbar
]);
}
/**
* @Route("/another-page")
*/
public function thirdPage()
{
return $this->render('file3.html.twig', [
//... the methods's data
'categoriesForNavbar' => $categoriesForNavbar
]);
}
这仅是示例,但$categoriesForNavbar
是变量,Doctrine从数据库中将类别返回到该变量,并将其放置在导航栏中。因此,我必须在每个控制器方法中返回这些类别。我想每一页都做一次。
请您告诉我最佳做法是什么?预先感谢您的回答。
您看过KnpMenuBundle吗?您可以将菜单构建为服务。使用em来获取需要填充不同菜单的Category []选项。
尝试使用Symfony中的嵌入控制器,此链接可以帮助您:https://symfony.com/doc/4.1/templating/embedding_controllers.html
<ul class="nav">
{{ render(controller('nameBundle:Controller:nameAction')) }}
</ul>