Symfony2 / Twig: Создать альтернативный абсолютный путь URL для использования с CDN? - PullRequest
9 голосов
/ 17 марта 2012

Это решение stackoverflow почти отвечает на мой вопрос.Но я хочу генерировать URL-адреса CDN в Twig не только для ресурсов.Я хотел бы создать их для динамического контента.Так что я не думаю, что настройка Assetic - это правильная область для поиска.

На данный момент я могу установить CDN_url в parameters.ini и использовать его в своих URL.Мой код выглядел бы так: {{CDN_Url}}{{url('route',{'param1':'value'}} .. Ведение кода - одна из главных причин, почему мне не нравится эта опция.Затем вы могли бы сделать что-то вроде проверки маршрута для /cdn/ для генерации URL-адреса CDN и всего остального, основываясь на домене.Мне бы не пришлось бегать, меняя множество переменных.И если бы я хотел остановить создание URL-адреса CDN.Я мог бы просто изменить маршрут.Таким образом, есть много преимуществ, чтобы выяснить, есть ли чистое решение для этого.

Если, уже нет решения - как бы я начал расширять функциональность {{ url() }}, чтобы я мог использовать его как path и url.

Ответы [ 2 ]

24 голосов
/ 18 марта 2012

Вы можете сделать это с помощью вопроса, который вы связали, следующим образом

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

Если вам нужно обработать несколько доменов CDN, вы можете сделать это следующим образом

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"]

А потом в вашем файле шаблона ветки

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

ИЛИ

{{ asset('path/of/file', 'cdn2')
6 голосов
/ 17 марта 2012

Я не знаю о CDN, но что касается расширения функции url, взгляните на:

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);
}

Таким образом, вы можете получить там getUrl или вставить свой собственный UrlGenerator.Не уверен, что будет проще в вашем конкретном случае.Возможно создание собственного UrlGenerator.

...