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

问题描述 投票:0回答:2

我想为我的应用创建带有类别的动态导航栏(其中类别来自数据库,用户始终可以添加自己的类别)。我的应用程序中有很多页面,每个页面都有一个控制器方法(比方说)。导航栏显示在每个应用程序页面上,其中包含来自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从数据库中将类别返回到该变量,并将其放置在导航栏中。因此,我必须在每个控制器方法中返回这些类别。我想每一页都做一次。

请您告诉我最佳做法是什么?预先感谢您的回答。

php symfony doctrine
2个回答
0
投票

您看过KnpMenuBundle吗?您可以将菜单构建为服务。使用em来获取需要填充不同菜单的Category []选项。


-1
投票

尝试使用Symfony中的嵌入控制器,此链接可以帮助您:https://symfony.com/doc/4.1/templating/embedding_controllers.html

<ul class="nav">
     {{ render(controller('nameBundle:Controller:nameAction')) }}
</ul>
© www.soinside.com 2019 - 2024. All rights reserved.