2012-03-17 8 views
9

このstackoverflow solutionはほとんど私の質問に答えます。しかし、私はTwigでCDN URLを生成するだけではなく、リソースに加えています。私は動的コンテンツのためにそれらを生成したいと思います。だから私はAsseticの微調整が正しいと思っていません。Symfony2/Twig:CDNで使用する代替絶対パスを生成しますか?

今のところ、CDN_urlをparameters.iniに設定し、それを私のURLに使用しています。私のコードは次のようになります:{{CDN_Url}}{{url('route',{'param1':'value'}} ..コードのメンテナンスは私がこのオプションが気に入らない大きな理由の1つです。次に、/cdn/のルートを確認してCDN URLを生成し、その他のすべてをドメインに基づいて確認するような作業を行うことができます。私は多くの変数を変更する必要はありません。 CDN URLの生成を停止したい場合は私はただルートを変更することができます。したがって、これにクリーンな解決策があるかどうかを判断することには多くの利点があります。

解決策がまだない場合は、{{ url() }}の機能を拡張して、pathurlのように使用できるようにするにはどうすればよいですか。私は、CDNのものについて知っているが、限り、URLの機能を拡張するなど、を見てみません

+0

あなたはSymfony2の上に構築されたマルチドメインサイトを持っているか、symfonyの経路によって定義される動的URLを持っているCDN上のコンテンツを持っていますか? –

+0

CDNの仕組みは、マルチドメインのようなものです。 cdn.domain.com/routeは、プルオリジンを使用してmy.domain.com/route ..をミラーリングします。場合によっては、メディアのようにmy.domainやその他の時間をロードするのには良い理由がありますが、cdn.domainをロードすることは理にかなっています。 – JustinP

答えて

24

あなたは、複数のCDNドメインを処理する必要がある場合は、app/config.yml

で道

に従うことによってそれを行うことができますが、道

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

に従うことによってリンクされ、質問の助けを借りてそれを行うことができます

# 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

これはすぐに使用できます。 @セラードのソリューションは、少し洗練された機能をすべて作り始めるのに最適です。 – JustinP

+0

Symfony 3.0では、 'packages'は 'framework:' - > 'assets:'の下にネストされるべきです。 – Jonathan

6

の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を作るでしょう。

関連する問題