如何在symfony2中的twig模板中访问存储库函数

Ran*_*ngh 11 php symfony doctrine-orm twig

我有class categroiesclass Products.

在我的存储库中我有功能

getProducts($categoryid,$location)

我需要像这样循环在树枝模板中

 {% for category in categories %}
    --{{ category.name }}--
      {% for product in getProducts(category.id,location) %}
     --{{ product.name }}--
    {% endfor %}
 {% endfor %}
Run Code Online (Sandbox Code Playgroud)

还是有更好的方法

Kin*_*nch 19

你不应该.这是业务逻辑,不应该出现在模板中.一种解决方案是在控制器和模板调用中创建新操作

{% render '@MyBundle:Product:list' with {category: category.id} %}
Run Code Online (Sandbox Code Playgroud)


10u*_*0us 7

这是一个非常古老的问题,但我错过了一个非常简单的解决方案.

可以将repo对象传递给twig并从twig调用repo public方法,如下所示:

在你的控制器中

$oCatRepo = $this->getDoctrine()->getManager()->getRepository('AppBundle:Categories');
....
return $this->render('product_list.html.twig', array('oCatRepo' => $oCatRepo));
Run Code Online (Sandbox Code Playgroud)

然后在你的树枝模板中:

{{ oCatRepo.getProducts(category.id, location) }}
Run Code Online (Sandbox Code Playgroud)

我说这是可能的,许多人会争辩说模板应该只显示数据并让控制器收集数据.我个人不介意让我的模板自己获取数据.