2012-03-17 12 views
9

Ten stackoverflow solution prawie odpowiada na moje pytanie. Ale chcę generować adresy URL CDN w Twig, aby uzyskać więcej niż tylko zasoby. Chciałbym je wygenerować dla zawartości dynamicznej. Nie sądzę więc, że dobrym akcentem będzie szukanie w Assetic.Symfony2/Twig: Generowanie alternatywnej ścieżki bezwzględnego adresu URL do użytku z CDN?

Na razie mogę ustawić CDN_url w parameters.ini i użyć tego w moich adresach URL. Mój kod wyglądałby tak: {{CDN_Url}}{{url('route',{'param1':'value'}} .. Utrzymanie kodu jest jednym z głównych powodów, dla których nie podoba mi się ta opcja. Następnie możesz zrobić rzeczy takie jak sprawdzanie trasy dla /cdn/, aby wygenerować adres URL CDN i wszystko inne na podstawie domeny. Nie musiałbym biegać, zmieniając wiele zmiennych. I jeśli chciałbym zatrzymać generowanie adresu URL CDN. Mógłbym po prostu zmodyfikować trasę. Jest więc wiele korzyści, aby dowiedzieć się, czy jest to czyste rozwiązanie.

Jeśli nie ma już rozwiązania - w jaki sposób zacznę rozszerzać funkcjonalność {{ url() }}, aby można było używać go tak, jak path i url.

+0

Czy masz wielu witryny domeny zbudowany na Symfony2 lub mieć treści na CDN, które dynamiczny adres URL, który jest zdefiniowany przez trasach symfony? –

+0

Sposób, w jaki działa CDN, jest jak posiadanie wielu domen. cdn.domena.com/route jest lustrem my.domain.com/route .. przy użyciu Pull Origin. Czasami jest tak, że istnieje dobry powód, aby załadować my.domain i inne czasy, tak jak w przypadku nośników, to ma sens załadowanie cdn.domain. – JustinP

Odpowiedz

24

Można to zrobić za pomocą strony pytania, które powiązany poprzez następujący sposób

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

Jeśli trzeba obsłużyć wiele domen CDN można to zrobić wykonując sposób

W app/config.yml

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

A następnie w pliku szablonu twig

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

LUB

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

Działa to natychmiast po wyjęciu z pudełka. @Cerad's rozwiązanie jest idealne dla Ciebie, aby zacząć od trochę bardziej czystą funkcję. – JustinP

+0

W Symfony 3.0 "pakiety" powinny być zagnieżdżone w ramach 'framework:' -> 'assets:'. – Jonathan

6

nie wiem o rzeczach CDN ale o ile rozszerzenie funkcji zawartości, przyjrzeć:

Symfony \ Most \ Gałązka \ Extension \ 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); 
} 

więc można dostać się do getUrl lub możesz wstawić własny UrlGenerator. Nie jestem pewien, który byłby łatwiejszy w twoim konkretnym przypadku. Prawdopodobnie tworzenie własnego UrlGeneratora.

Powiązane problemy