Php 如何使一个控制器在Symfony的每个页面上执行?

Php 如何使一个控制器在Symfony的每个页面上执行?,php,symfony,doctrine,Php,Symfony,Doctrine,我想为我的应用程序制作带有类别的动态导航栏(其中类别取自数据库,用户可以随时添加自己的类别)。我的应用程序中有很多页面,每个页面都有一个控制器方法(比如说)。导航栏显示在每个应用程序页面上,它包含来自dabatase的动态数据。因此,在每个控制器方法中,我必须为navbar返回这些类别 例如: /** * @Route("/") */ public function firstPage() { return $this->render('file.html.twig', [

我想为我的应用程序制作带有类别的动态导航栏(其中类别取自数据库,用户可以随时添加自己的类别)。我的应用程序中有很多页面,每个页面都有一个控制器方法(比如说)。导航栏显示在每个应用程序页面上,它包含来自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
是一个变量,条令会从数据库中返回将放置在navbar中的类别。
所以我必须在每个控制器方法中返回这些类别。我想每一页写一次

你能告诉我做这件事的最佳做法是什么吗?
提前感谢您的回答。

请尝试Symfony中的嵌入式控制器,此链接可以帮助您:

    {{呈现(控制器('nameBundle:controller:nameAction'))}

你看过吗?您可以将菜单构建为服务。使用em获取填充不同菜单所需的类别[]aray。

您可以编写一个自定义细枝扩展,如此处所述:另一个选项是将控制器渲染嵌入基本模板中,如此处所述:谢谢大家!我选择了另一个选项,因为它对我来说似乎更“干净”,而且工作正常!但是这两种方式之间有很大的区别吗?在这种情况下,哪种做法更好?谢谢!我将来要试试
<ul class="nav">
     {{ render(controller('nameBundle:Controller:nameAction')) }}
</ul>