Php VichUploaderBundle使用细枝渲染图像时出现的问题
我对VichUploaderBundle有一个问题,我遵循了所有的说明,我可以让它上传一个图像,现在我不知道如何使用twig渲染图像。 我有一个产品实体,它与Photo有一个OneToOne关系(我将实体Photo与VichUploaderBundle一起使用) 我的html.twig文件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
{% 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" />