2012-07-10 81 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