2012-07-10 86 views
3

我正在使用Twig循环为多个图像生成<img src="">。我最终使用这段代码是为了在Framework配置中利用带有base_url的CDN。Symfony2 Twig Asset Base_Url正在不可预知?

下面是Twig代码:

{% for key, mobj in productmedia.getImages %} 
    <img src="{{ asset(path('cropImage', {'filename': mobj.getFilename }),'cdn') }}" /> 
{% endfor %} 

{% for key, mobj in productmedia.getImages %} 
    <img src="{{ asset(path('cropImageSm', {'filename': mobj.getFilename }),'cdn') }}" /> 
{% endfor %} 

我所期望的,至少是为了有输出一定的一致性..但似乎SF2有时会使用一个BASE_URL有时不是使用一个。为什么会这样?

以下是输出。

<img src="http://cdn.cloudfront.net/cri/1/matt-skydiving.SH340_SW340.jpg" /> 
<img src="/cri/1/Swimming.SH340_SW340.jpg" /> 
<img src="http://cdn.cloudfront.net/cri/1/successman2.SH340_SW340.jpg" /> 

<img src="/cri/1/matt-skydiving.SH40_SW40.jpg" /> 
<img src="http://cdn.cloudfront.net/cri/1/Swimming.SH40_SW40.jpg" /> 
<img src="http://cdn.cloudfront.net/cri/1/successman2.SH40_SW40.jpg" /> 

正如你可以在第一个循环看到..一些继承BASE_URL ..有些不..我已经清除了所有的缓存..做好了所有的一般调试步骤。它不理解为什么这不一致。

回答

4

您可以切换到url树枝功能,这是一样的path但是这一次总是会返回一个绝对的URL:

url('cropImageSm', {'filename': mobj.getFilename }) 

进一步参考:

Asset()将使用所提供的主机config.yml

framework: 
    templating: 
     packages: 
      {althostname}: 
       base_urls: { http: ["http://www.domain2.com"], ssl: "/"] } 

所以{{ asset(path('route1', {'page': 1 }),'althostname') }}将输出.. http://www.domain2.com/route1/page/1

+0

谢谢卡洛斯!有一个原因,我想通过'url()'使用'path()'。 Url()会给你一个绝对的URL,而Path()会为你提供相对的URL。但是当你使用asset()函数时,你可以动态地插入你的configuration.yml框架部分指定的base_urls。我发现我的问题是我的配置文件中缺少**%**。在我添加缺少的**%**之后,我的结果就是我的预期。 – JustinP 2012-07-11 16:49:31