10 votes

Symfony2 / Twig : Générer un chemin alternatif d'URL absolue pour une utilisation avec CDN ?

Ce site solution stackoverflow répond presque à ma question. Mais je veux générer des urls CDN dans Twig à plus que de simples ressources. J'aimerais les générer pour du contenu dynamique. Je ne pense donc pas qu'une modification d'Assetic soit le bon endroit où chercher.

Pour l'instant, je peux définir CDN_url dans parameters.ini et l'utiliser dans mes urls. Mon code ressemblerait à ceci : {{CDN_Url}}{{url('route',{'param1':'value'}} .. La maintenance du code est une raison majeure pour laquelle je n'aime pas cette option. Vous pourriez alors faire des choses comme vérifier la route de /cdn/ pour générer l'url du CDN et que tout le reste soit basé sur le domaine. Je n'aurais pas à changer un grand nombre de variables. Et si je voulais empêcher la génération de l'url CDN. Je pourrais simplement modifier la route. Il y a donc beaucoup d'avantages à trouver une solution propre à ce problème.

S'il n'y a pas déjà une solution, comment puis-je commencer à étendre le système de gestion de l'information de l'entreprise ? {{ url() }} afin que je puisse l'utiliser comme path y url .

25voto

m2mdas Points 8375

Vous pouvez le faire à l'aide de la question que vous avez liée en suivant le chemin suivant

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

Si vous avez besoin de gérer plusieurs domaines CDN, vous pouvez le faire de la manière suivante

Sur app/config.yml

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

Et ensuite, dans votre fichier modèle twig

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

OU

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

6voto

Cerad Points 13840

Je ne sais pas ce qu'il en est du CDN, mais pour ce qui est de l'extension de la fonction url, jetez un coup d'œil à :

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

Vous pouvez donc utiliser getUrl à cet endroit ou insérer votre propre UrlGenerator. Je ne sais pas ce qui serait le plus facile dans votre cas spécifique. Probablement en créant votre propre UrlGenerator.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X