如何从Twig

时间:2016-07-22 22:52:07

标签: symfony doctrine-orm twig

很多人会告诉我,我应该想办法在我的桌子上更好地建立关系,但我有一个'产品'表和'product_images'表,它们很容易在查询中加入,但因为图像的路径可能完全不同,我不想在表中存储路径名,我需要一个函数来进行一些计算以找出路径是什么。我需要为每个产品运行的方法,因为我在每个产品上进行迭代以获得图像的路径。

我想做什么,也许我没有正确思考,是在Twig我想要一个方法来运行产品实体

{% for product in products %}
    {{product.getImageUrl()}}
{% endfor %}

会调用我的产品实体

中的方法
//AppBundle:Entity:Product
public function getImageUrl()
{
    $repository = $this->getDoctrine()->getRepository('AppBundle:Product');
    return $repository->getImagePath($this->id);
}

在我的存储库中:

//AppBundle:Repositiories:ProductRepository
public function getImagePath($id)
{
    return 'http://domain.com/path/to/image.jpg'//simplified for my question
}

我该怎么做?当我试着这个时,我收到以下错误:

An exception has been thrown during the rendering of a template ("Notice: Array to string conversion") in product/index.html.twig at line 19. 

第19行是

<img src="{{product.getImageUrl()}}" alt="img">

如何使用实体中的方法完成?或者告诉我如何才能做到这一点。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的问题的答案就在错误消息中。 正如它向您解释的那样,twig无法将数组转换为字符串。现在为什么我们甚至有一个阵列?

我认为,在您的public function getImagePath($id)方法中,您最后会调用getResult()来获取所需的图像路径。但是,getResult始终返回结果数组,即使只有一个结果。

如果您确定只会获得一个结果,请尝试拨打getOneOrNullResult(),这样可以解决您的问题