У меня проблема с меню в 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
Есть идеи, что может пойти не так? Нужно ли создавать новый шаблон, который содержит только блок навигации?
Сначала создайте navigation
как услуга, затем измените вашу конфигурацию:
twig:
globals:
navigation: "@service_name"
Вы можете получить к нему доступ во всех ваших шаблонах:
{{ navigation.buildMenu() }}
Это не работает со статическими методами. Для статических методов вы можете создать расширение ветки.
Для получения дополнительной информации прочитайте поваренную книгу Symfony на растяжки.
Я решаю эту проблему путем создания нового метода в контроллере:
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 %}