Не удается получить объекты базы данных при расширении до другого шаблона ветки в Symfony2 - PullRequest
1 голос
/ 26 января 2012

Я новичок в Symfony2 (со знаниями в 1.2-1.4) и без особых проблем пытаюсь извлечь некоторые объекты из БД.У меня есть базовый шаблон (index.html.twig), который имеет следующий блок кода:

<nav>
<ul class="menu">
<li><a class="active" href="index.html">Home Page</a></li>

{% for category in categories %}  
<li><a href="{{ category.name }}">{{ category.name }}</a></li>
{% endfor %}

<li class="last-item"><a href="contacts.html">Contact Us</a></li>
</ul>
</nav>

Метод выбора категорий находится в DefaultController:

public function indexAction()
{
        $em = $this->getDoctrine()->getEntityManager();

        $categories = $em->getRepository('XxxYyyBundle:Category')->findAll();
        $genres = $em->getRepository('XxxYyyBundle:Genre')->findAll();

        echo $categories.$genres;

        return array('categories' => $categories, 'genres' => $genres);
}

Если я получаю доступ к страницеиз По умолчанию это работает отлично, но если я пытаюсь получить доступ с другой страницы, которая расширяет шаблон (используя {% extends "XxxYyyBundle: По умолчанию: index.html.twig"%}), я получаю следующую ошибку:

Переменная «категории» не существует в XxxYyyBundle: По умолчанию: index.html.twig в строке 53

Я перепробовал все варианты, включенные в книгу (% включают и т. Д.), Тольковывод, что с других страниц indexAction () не выполняется.Я думаю, что получение элементов из БД для включения их в меню является чем-то обычным, поэтому, если кто-то знаком с этим вопросом, я буду очень благодарен за любую помощь.

Спасибо.

1 Ответ

1 голос
/ 26 января 2012

Самый простой способ - разместить тег рендеринга в макете и ссылаться на контроллер, который выполняет запросы и визуализирует фрагмент меню.

{% render 'SomeBundle:Menu:menu' %}
...