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
知道可能出现什么问题吗?我是否需要创建仅包含导航块的新模板?
答案 0 :(得分:3)
首先,创建navigation
作为服务,然后更改您的配置:
twig:
globals:
navigation: "@service_name"
您可以通过以下方式在所有模板中访问它:
{{ navigation.buildMenu() }}
这不适用于静态方法。对于静态方法,您可以创建树枝扩展。
有关更多信息,请阅读twig extensions上的symfony食谱。
答案 1 :(得分:0)
我通过在控制器中创建一个新方法解决了这个问题:
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 %}