Symfony2包括带控制器变量的树枝

时间:2015-04-16 10:44:36

标签: php html symfony

我正在学习symfony2,这是我第一次真的陷入困境,不知道该怎么做。我创建了3个页面,索引页面,产品页面和特殊商品页面。所有这些页面都需要使用另一个模板中的一个动态侧边栏。

以下是操作的控制器:

public function indexAction()   ///// im showing the products form mysql here
    {

            $em = $this->getDoctrine()->getManager();
            $products = $em->getRepository('MpShopBundle:Product')->findAll();
               return $this->render('MpShopBundle:Frontend:index.html.twig',  array(
               'products'=>$products       
               ));

    }
    public function viewAction($id) //// im showing a single product based on the id
    {

        $em = $this->getDoctrine()->getManager();
        $product = $em->getRepository('MpShopBundle:Product')->find($id);

        return $this->render('MpShopBundle:Frontend:product_details.html.twig', array(
        'product'=>$product
        ));

    }

     public function specialAction()    //// a simple page to test the sidebar
    {

            $em = $this->getDoctrine()->getManager();
            $products = $em->getRepository('MpShopBundle:Product')->findAll();
               return $this->render('MpShopBundle:Frontend:special_offer.html.twig',  array(
               'products'=>$products       
               ));

    }

这是用于生成类别的侧边栏模板代码(只有在产品有类别时才显示类别):

{% for product in products %}

                <li class="subMenu"><a> {{ product.category }} [{{ product|length }}]</a>
                <ul>
                    <li><a href="{{ path('products') }}">{{ product.subcategory }} ({{ product|length }})</a></li>

                </ul>
                </li>

            {% endfor %}

我在我的网页上包含侧边栏模板,如下所示:

{% block sidebar %} {% include 'sidebar.html.twig' %} {% endblock %}

问题:它在索引和特价商品页面上完美运行,但在视图页面上我得到一个未定义的变量产品错误。我想我知道这个问题,因为控制器中该页面的变量是产品(获取特定产品)。那么如何让这个侧栏在所有网页上都能正常运行呢?

已修复使用http://symfony.com/doc/2.0/book/templating.html#embedding-controllers教程解决了该问题。如果有人有同样的问题,请阅读!!!!

1 个答案:

答案 0 :(得分:0)

public function viewAction($id) //// im showing a single product based on the id
{

    $em = $this->getDoctrine()->getManager();
    $product = $em->getRepository('MpShopBundle:Product')->find($id);
    $products = $em->getRepository('MpShopBundle:Product')->findAll();

    return $this->render('MpShopBundle:Frontend:product_details.html.twig', array(
        'product' => $product,
        'products' => $products
    ));

}