Php VichUploaderBundle使用细枝渲染图像时出现的问题

Php VichUploaderBundle使用细枝渲染图像时出现的问题,php,symfony,assets,vichuploaderbundle,Php,Symfony,Assets,Vichuploaderbundle,我对VichUploaderBundle有一个问题,我遵循了所有的说明,我可以让它上传一个图像,现在我不知道如何使用twig渲染图像。 我有一个产品实体,它与Photo有一个OneToOne关系(我将实体Photo与VichUploaderBundle一起使用) 我的html.twig文件 {% for product in products %} <img src="{{ vich_uploader_asset(product, 'image') }}" alt="{{ prod

我对VichUploaderBundle有一个问题,我遵循了所有的说明,我可以让它上传一个图像,现在我不知道如何使用twig渲染图像。 我有一个产品实体,它与Photo有一个OneToOne关系(我将实体Photo与VichUploaderBundle一起使用)

我的html.twig文件

{% for product in products %}

 <img src="{{ vich_uploader_asset(product, 'image')   }}" alt="{{ product.nombre }}" />
{% endfor %}
因此,我在img标签中添加了以下内容

  <img src="{{ vich_uploader_asset(product, 'image','AppBundle\Entity\Product') }}" alt="{{ product.nombre }}" />
我的实体存储在AppBundle\Entity\*中,并且它会删除斜杠

我还试图添加这一点,但没有成功

<img src="{{ vich_uploader_asset(product.photo, 'image','AppBundle\Entity\Product') }}" alt="{{ product.nombre }}" />

我的照片实体(根据捆绑包的说明进行复制和粘贴)


我认为您必须根据照片实体配置显示照片:

<img src="{{ vich_uploader_asset(product.photo, 'image') }}" alt="{{ product.nombre }}" />


我终于成功了。 我已经编写了一些angularjs代码(我也在我的网站上使用)。 这就是我所做的

我的main.js

 $http.get('/get-products-by-user').success(function(data){
    $scope.products = data;
})
路由.yml

get_products_by_user:
  path: /get-products-by-user
  defaults: { _controller: AppBundle:Product:getAllProductsByUser}
产品控制器:GetAllProductsByser

 public function getAllProductsByUserAction()
{
    $products = $this->getDoctrine()
        ->getRepository('AppBundle:Product')
        ->findAllProductsByUser($this->getUser()->getId());

    return new Response(json_encode($products),200);
}
我的list-all-products.html.twig行,用于渲染图像

<div ng-repeat="product in products | filter: query" >
   <img ng-src="/images/products/{[{product.photo.imageName }]}" class="img-responsive img-thumbnail size-img" alt="{[{ product.nombre }]}"/></div>
我不知道这是否是一种使用bundle的好方法(它只是起作用),我只是使用vichUploader上传图像,然后我做一个查询以获得包括文件名在内的所有产品,一旦我得到,我就使用uri_前缀/{[{product.imageName}]}来渲染图像


({[{}]},我同时使用angularjs和twig模板引擎,这就是我使用该语法的原因)

我知道这非常古老,但对于谷歌来说仍然非常相关。我认为这应该奏效:

  • 将“图像文件”改为“图像”
  • 将类名的斜线加倍

    {{vich_uploader_asset(产品,'imageFile','AppBundle\\Entity\\product')}


这是一个老问题,但这让我和Symfony、Doctrine和VichUploaderBundle的新手都感到困惑,这个问题在谷歌最为相关。如果你把这一切都搞错了,一个常见的小树枝错误是
字段映射未找到
,这是我出于谷歌的原因包括在内的

条令返回一个产品对象数组,其中一个照片对象作为每个产品的子对象。vich_uploader_asset需要这个照片子对象来渲染图像。因此,使用访问每个产品对象的照片子对象:
product.photo
,而不仅仅是
product

vich_uploader_asset的第二个参数是在照片实体中添加UploadeableField注释/配置时使用的字段名。在上面的示例中,这是
imageFile
,而不是
image
。在中,
图像
是字段名,因此您可能就是从中复制代码的

vich_uploader_asset的第三个参数是指定可上传实体的类名,它同样不是Product,而是Photo。但实际上您并不需要它,因为只要您指定
product.photo
,vich就会找到它。但如果您确实需要它,您需要像@stefanch指出的那样包含2个反斜杠

因此,以下是您需要的线路:

<img src="{{ vich_uploader_asset(product.photo, 'imageFile') }}" alt="{{ product.nombre }}" />

尝试此方法,其中日期是您的对象

<img src="{{ path ~ vich_uploader_asset(data, 'imageFile', 'App\\Entity\\Crente') }}" style="margin-top: -20px" />


您能添加产品和照片实体的源代码吗?我刚刚添加了两个实体,感谢您花时间阅读和帮助!
get_products_by_user:
  path: /get-products-by-user
  defaults: { _controller: AppBundle:Product:getAllProductsByUser}
 public function getAllProductsByUserAction()
{
    $products = $this->getDoctrine()
        ->getRepository('AppBundle:Product')
        ->findAllProductsByUser($this->getUser()->getId());

    return new Response(json_encode($products),200);
}
<div ng-repeat="product in products | filter: query" >
   <img ng-src="/images/products/{[{product.photo.imageName }]}" class="img-responsive img-thumbnail size-img" alt="{[{ product.nombre }]}"/></div>
 mappings:
    product_image:
        uri_prefix: /images/products
        upload_destination: %kernel.root_dir%/../web/images/products
<img src="{{ vich_uploader_asset(product.photo, 'imageFile') }}" alt="{{ product.nombre }}" />
<img src="{{ path ~ vich_uploader_asset(data, 'imageFile', 'App\\Entity\\Crente') }}" style="margin-top: -20px" />