Как сделать один контроллер, который выполняется на каждой странице в Symfony? - PullRequest
0 голосов
/ 07 ноября 2019

Я хотел бы создать динамическую навигационную панель с категориями для моего приложения (где категории берутся из базы данных, и пользователь всегда может добавить свои собственные категории). У меня есть много страниц в моем приложении, и для каждой страницы есть один метод контроллера (скажем). Навбар отображается на каждой странице приложения и содержит динамические данные из базы данных. Таким образом, внутри каждого метода контроллера я должен был бы возвращать эти категории для 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 возвращает категории из базы данных, которые будут помещены в навигационную панель.
ИтакЯ должен вернуть эти категории внутри каждого метода контроллера. Я хотел бы сделать это один раз для каждой страницы.

Не могли бы вы сказать, пожалуйста, как лучше всего это сделать? Заранее благодарю за ответы.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Вы смотрели на KnpMenuBundle ? Вы можете создавать меню как услуги. Используйте их, чтобы получить массивы Category [], необходимые для заполнения различных меню.

0 голосов
/ 07 ноября 2019

Попробуйте встроенные контроллеры в Symfony, эта ссылка может вам помочь: https://symfony.com/doc/4.1/templating/embedding_controllers.html

<ul class="nav">
     {{ render(controller('nameBundle:Controller:nameAction')) }}
</ul>
...