我正在学习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教程解决了该问题。如果有人有同样的问题,请阅读!!!!
答案 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
));
}