2012-03-17 63 views
9

這個stackoverflow solution差不多回答我的問題。但我想在Twig中生成CDN網址,而不僅僅是資源。我想爲它們生成動態內容。所以我不認爲一個資產調整是正確的領域。Symfony2/Twig:生成備用絕對URL路徑以用於CDN?

現在,我可以設置CDN_url在parameters.ini並在我的網站中使用。我的代碼看起來像這樣:{{CDN_Url}}{{url('route',{'param1':'value'}} ..代碼維護是我不喜歡這個選項的一個主要原因。然後,您可以執行諸如檢查/cdn/的路線以生成CDN網址和其他所有內容以基於域名。我不必跑來跑去改變很多變數。如果我想停止生成CDN網址。我可以修改路線。所以確定是否有一個乾淨的解決方案有很多好處。

如果還沒有解決方案 - 我將如何開始擴展{{ url() }}功能,以便我可以像pathurl那樣使用它。

+0

你有建立在Symfony2的多域站點或對CDN內容具有動態URL這是由symfony的路線定義? – 2012-03-18 15:55:03

+0

CDN的工作方式就像擁有一個多域一樣。 cdn.domain.com/route鏡像my.domain.com/route ..使用Pull Origin。所以有時候,加載my.domain和其他時間是有很好的理由的,就像媒體一樣,加載cdn.domain是有意義的。 – JustinP 2012-03-18 17:44:11

回答

24

您可以與您通過以下方式聯繫問題的幫助下做

{{ asset(path('route',{'param1':'value'})) }} 

如果您需要通過以下方式

處理多個CDN領域,你可以做到這一點在app/config.yml

# app/config.yml 
#.... 
templating:  
    engines: ['twig'] 
    packages: 
    cdn1: 
     base_urls: ["http://cdn1.domain.com"] 
    cdn2: 
     base_urls: ["http://cdn2.domain.com"] 

然後在你的樹枝模板文件中

{{ asset('path/of/file', 'cdn1') 

OR

{{ asset('path/of/file', 'cdn2') 
+0

這可以直接使用。 @Cerad的解決方案非常適合所有人開始使用一些清潔功能。 – JustinP 2012-03-19 02:29:00

+0

在Symfony 3.0中,'packages'應該嵌套在'framework:' - >'assets:'下面。 – Jonathan 2016-03-23 00:03:23

6

我不知道的東西,CDN但就延長URL功能,一起來看看:

的Symfony \橋\嫩枝\延期\ RoutingExtension

public function __construct(UrlGeneratorInterface $generator) 
{ 
    $this->generator = $generator; 
} 
public function getFunctions() 
{ 
    return array(
     'url' => new \Twig_Function_Method($this, 'getUrl'), 
     'path' => new \Twig_Function_Method($this, 'getPath'), 
    ); 
} 
public function getPath($name, $parameters = array()) 
{ 
    return $this->generator->generate($name, $parameters, false); 
} 

public function getUrl($name, $parameters = array()) 
{ 
    return $this->generator->generate($name, $parameters, true); 
} 

,所以你可以在那裏得到getUrl,或者你可以插入你自己的UrlGenerator。不確定在你的具體情況下哪個更容易。可能使你自己的UrlGenerator。