Symfony2/Twig: создать альтернативный абсолютный путь URL для использования с CDN?

Это qaru.site/questions/589898/... почти отвечает на мой вопрос. Но я хочу генерировать URL-адреса CDN в Twig больше, чем просто ресурсы. Я бы хотел создать их для динамического контента. Поэтому я не думаю, что Assetic tweak - это подходящая область для поиска.

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

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

2 ответа

Вы можете сделать это с помощью связанного с вами вопроса следующим образом.

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

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

В app/config.yml

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

И затем в вашем файле шаблона twig

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

ИЛИ

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


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

Symfony\Мост\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.

licensed under cc by-sa 3.0 with attribution.