扩展包含树枝中导航块的模板

时间:2015-03-26 17:48:33

标签: php symfony twig symfony-2.3 twig-extension

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 

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

2 个答案:

答案 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 %}