2012-03-17 8 views
9

Este stackoverflow solution casi responde mi pregunta. Pero quiero generar URL de CDN en Twig a más que solo recursos. Me gustaría generarlos para contenido dinámico. Entonces, no creo que un ajuste de Assetic sea el área correcta para mirar.Symfony2/Twig: ¿Generar una ruta URL alternativa absoluta para usar con CDN?

Por ahora, puedo configurar CDN_url en parameters.ini y usar eso en mis direcciones URL. Mi código se vería así: {{CDN_Url}}{{url('route',{'param1':'value'}} .. El mantenimiento del código es una razón importante por la que no me gusta esta opción. Luego, podría hacer cosas como verificar la ruta /cdn/ para generar la URL CDN y todo lo demás que se basará en el dominio. No tendría que correr por ahí cambiando muchas variables. Y si quería detener la generación de la URL CDN. Podría simplemente modificar la ruta. Entonces, hay muchos beneficios al descubrir si hay una solución limpia para esto.

Si, no hay una solución ya - cómo comenzaría a extender la funcionalidad {{ url() }} para poder usarla como path y url.

+0

¿Tiene un sitio de dominio de múltiples construido sobre Symfony2 o tener un contenido en CDN que han URL dinámica que se define por las rutas de Symfony? –

+0

La forma en que funciona el CDN es como tener un dominio múltiple. cdn.domain.com/route refleja my.domain.com/route .. usando Pull Origin. A veces, hay buenas razones para cargar my.domain y otras veces, como con los medios, tiene sentido cargar el cdn.domain. – JustinP

Respuesta

24

Puede hacerlo con la ayuda de la cuestión se enlazó siguiendo manera

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

Si tiene que manejar múltiples dominios de CDN que puede hacer siguiendo manera

En app/config.yml

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

Y luego en su plantilla de ramita archivo

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

O

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

Esto funciona nada más sacarlo de la caja. La solución de @Cerad es excelente para comenzar a hacer un poco de función limpiadora. – JustinP

+0

En Symfony 3.0, 'packages' debe anidarse en 'framework:' -> 'assets:'. – Jonathan

6

No sé acerca de las cosas CDN pero por lo que se extiende la función url, echar un vistazo a:

Symfony \ Puente \ ramita \ 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); 
} 

por lo que podría obtener getUrl allí o puede insertar su propio UrlGenerator. No estoy seguro de cuál sería más fácil en su caso específico. Probablemente haciendo tu propio UrlGenerator.

Cuestiones relacionadas