1

我对 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 

知道可能出了什么问题吗?我是否需要创建一个只包含导航块的新模板?

4

2 回答 2

3

首先,创建navigation为服务,然后更改您的配置:

twig:
    globals:
        navigation: "@service_name"

您可以通过以下方式在所有模板中访问它:

{{ navigation.buildMenu() }}

这不适用于静态方法。对于静态方法,您可以创建一个树枝扩展。

更多信息请阅读 symfony 的twig 扩展手册。

于 2015-03-26T21:01:09.023 回答
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 %}
于 2015-03-27T09:20:09.810 回答