Symfony2. Как сделать чтобы список чего-либо из бд выводился на всех страницах? Здравствуйте, уважаемые знатоки! Помогите мне, пожалуйста, решить проблему, нужно вывести блок категорий на всех страницах. Всего 18 страниц, и 18 роутов для них. Как это сделать не передавая в каждом контроллере и экшене выборку с категориями?
Существует несколько способов решения данной проблемы в Symfony2. Один из самых распространенных способов - использовать сервисы и шаблонизатор Twig.
Создайте сервис для выборки категорий из базы данных. Создайте файл CategoryService.php в папке Services вашего бандла:<?php namespace AppBundle\Services; use Doctrine\ORM\EntityManager; class CategoryService { private $em; public function __construct(EntityManager $em) { $this->em = $em; } public function getCategories() { return $this->em->getRepository('AppBundle:Category')->findAll(); } }Зарегистрируйте сервис в файле services.yml вашего бандла:services: app.category_service: class: AppBundle\Services\CategoryService arguments: ['@doctrine.orm.entity_manager']В шаблоне base.html.twig (или другом общем шаблоне) выведите категории:{% set categories = app.category_service.getCategories() %} {% for category in categories %} <li>{{ category.name }}</li> {% endfor %}
Теперь категории будут выводиться на всех страницах вашего сайта.
Другой способ - использовать события. Вы можете создать событие, которое будет вызываться при загрузке страницы, и в обработчике этого события получать категории из базы данных и передавать их в шаблон.
Существует несколько способов решения данной проблемы в Symfony2. Один из самых распространенных способов - использовать сервисы и шаблонизатор Twig.
Создайте сервис для выборки категорий из базы данных. Создайте файл CategoryService.php в папке Services вашего бандла:<?phpnamespace AppBundle\Services;
use Doctrine\ORM\EntityManager;
class CategoryService
{
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function getCategories()
{
return $this->em->getRepository('AppBundle:Category')->findAll();
}
}Зарегистрируйте сервис в файле services.yml вашего бандла:services:
app.category_service:
class: AppBundle\Services\CategoryService
arguments: ['@doctrine.orm.entity_manager']В шаблоне base.html.twig (или другом общем шаблоне) выведите категории:{% set categories = app.category_service.getCategories() %}
{% for category in categories %}
<li>{{ category.name }}</li>
{% endfor %}
Теперь категории будут выводиться на всех страницах вашего сайта.
Другой способ - использовать события. Вы можете создать событие, которое будет вызываться при загрузке страницы, и в обработчике этого события получать категории из базы данных и передавать их в шаблон.