2012-03-17 12 views
9

Questo stackoverflow solution quasi risponde alla mia domanda. Ma voglio generare URL CDN in Twig in più di risorse. Mi piacerebbe generarli per contenuti dinamici. Quindi non credo che un assise tweak sia l'area giusta da guardare.Symfony2/Twig: Genera percorso URL alternativo alternativo per l'uso con CDN?

Per ora, posso impostare CDN_url in parameters.ini e utilizzarlo nei miei url. Il mio codice sarebbe simile a questo: {{CDN_Url}}{{url('route',{'param1':'value'}} .. La manutenzione del codice è uno dei motivi principali per cui questa opzione non mi piace. Quindi puoi fare cose come controllare il percorso per /cdn/ per generare l'url CDN e tutto il resto per essere basato sul dominio. Non dovrei correre in giro cambiando molte variabili. E se volessi interrompere la generazione dell'URL CDN. Potrei semplicemente modificare il percorso. Quindi ci sono molti vantaggi nel capire se c'è una soluzione pulita a questo.

Se, non esiste già una soluzione, come iniziare ad estendere la funzionalità {{ url() }} in modo che possa essere utilizzata come path e url.

+0

Avete sito a più dominio costruito su Symfony2 o hanno contenuto di CDN che hanno URL dinamico che è definito da linee di symfony? –

+0

Il modo in cui funziona il CDN è come avere un multi-dominio. cdn.domain.com/route mirror my.domain.com/route .. utilizzando Pull Origin. SO a volte, ci sono buone ragioni per caricare my.domain e altre volte, come con i media, ha senso caricare il cdn.domain. – JustinP

risposta

24

Si può fare con l'aiuto della questione si è collegato seguendo modo

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

Se è necessario gestire più domini CDN si può fare seguendo modo

In app/config.yml

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

E quindi nel file modello di ramoscello

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

O

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

Funziona appena fuori dalla scatola. La soluzione di @Cerad è ottima per iniziare a fare una piccola funzione più pulita. – JustinP

+0

In Symfony 3.0, i 'pacchetti' dovrebbero essere nidificati sotto 'framework:' -> 'assets:'. – Jonathan

6

Non so circa la roba CDN ma per quanto riguarda l'estensione della funzione di url, dare un'occhiata a:

Symfony \ Ponte \ Twig \ 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); 
} 

così si potrebbe arriva a getUrl lì o potresti inserire il tuo UrlGenerator. Non sono sicuro quale sarebbe più facile nel tuo caso specifico. Probabilmente creando il proprio UrlGenerator.