Расширяет шаблон, который содержит блок навигации в ветке

У меня проблема с меню в symfony2. У меня есть класс, который загружает контент для первой страницы, включая меню:

public function indexAction(){
$aMenu                          = Navigation::buildMenu();
return $this->render('ShopDesktopBundle::layout.html.twig', array(
'aProducts' => $aProducts,
'aMenu'     => $aMenu
));
}

Теперь я создаю новый контроллер:

class CategoryController extends Controller{
public function showCategoryAction($id){
return $this->render('ShopDesktopBundle:Category:category.html.twig');
}
}

Я расширяю шаблон: layout.html.twig

{% extends 'ShopDesktopBundle::layout.html.twig' %}

Я получаю ошибку:

Variable "aMenu" does not exist in ShopDesktopBundle::layout.html.twig at line 89

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

1

Решение

Сначала создайте navigation как услуга, затем измените вашу конфигурацию:

twig:
globals:
navigation: "@service_name"

Вы можете получить к нему доступ во всех ваших шаблонах:

{{ navigation.buildMenu() }}

Это не работает со статическими методами. Для статических методов вы можете создать расширение ветки.

Для получения дополнительной информации прочитайте поваренную книгу Symfony на растяжки.

3

Другие решения

Я решаю эту проблему путем создания нового метода в контроллере:

public function menuAction(){
$aMenu                          = Navigation::buildMenu();
return $this->render('ShopDesktopBundle:Category:menu.html.twig', array(
'aMenu'     => $aMenu
));
}

Я создал новый вызов представления: menu.html.twig

А в layout.html.twig в блок навигации добавляю:

{% block navigation %}
{{ render(controller( 'ShopDesktopBundle:Home:menu' )) }}
{% endblock %}
0

По вопросам рекламы [email protected]