我将文件上传到web/files/images/
,我正在尝试使用asset
函数链接它们:
<img src='{{ asset(article.image) }}'/>
但这会产生/img1.jpg
之类的网址
我需要添加前缀(设置基本文件夹)资产URL以强制它/files/images/img1.jpg
我如何在asset
网址前加上?
答案 0 :(得分:10)
虽然您可以轻松地为此目的引入新的树枝变量(即在基础模板中)......
{% set asset_base = '//files/images' %}
...或创建静态全局树枝变量...
# app/config/config.yml
twig:
globals:
asset_base: //files/images
...然后在内部使用它,即src
标记的img
属性...
<img src='{{ asset_base }}{{ asset(article.image) }}'/>
... symfony2已经以assets_base_urls
指令的形式提供此功能:
# app/config/config.yml
framework:
templating:
assets_base_urls:
http: [http://domain/files/images]
ssl: [https://domain/files/images]
您还可以通过提供协议相对网址来设置基本网址:
framework:
templating:
assets_base_urls: //files/images
有关该指令的更多信息,请参阅文档章节 FrameworkBundle Configuration#assets-base-urls 。
答案 1 :(得分:3)
请注意,自symfony 2.7起,来自@nifr的 assets_base_urls 解决方案仅适用于有效的网址,而不适用于相关的网址。
请参阅此处https://github.com/symfony/symfony/issues/14332
&gt;的解决方案2.7是使用相对基本路径的新资产组件作为前缀。
framework:
assets:
base_path: 'assets'
答案 2 :(得分:2)
如果您不想为所有资产添加前缀,资产助手会提供另一种使用包执行此操作的非常好的方法。
包具有名称,可以具有其他设置,例如版本和基本路径。您可以在配置中配置程序包,并可以在资产功能的第二个参数中设置要使用的程序包的名称。
在你的情况下:
framework:
templating:
packages:
images:
base_url: /web/files/images # can also be scheme specific
然后在你的模板中:
<img src="{{ asset('...', 'images'). }}">
更多信息:http://symfony.com/doc/current/components/templating/helpers/assetshelper.html#multiple-packages