这stackoverflow solution几乎回答了我的问题。但我想在Twig
中生成CDN网址,而不仅仅是资源。我想为动态内容生成它们。因此,我不认为Assetic调整是正确的选择。
现在,我可以在parameters.ini
中设置CDN_url并在我的网址中使用它。我的代码看起来像这样:{{CDN_Url}}{{url('route',{'param1':'value'}}
..代码维护是我不喜欢这个选项的一个主要原因。然后你可以做一些事情,比如检查/cdn/
的路由以生成CDN网址以及其他所有基于域的路由。我不需要改变很多变量。如果我想阻止CDN网址生成。我可以修改路线。因此,找出是否有一个干净的解决方案有很多好处。
如果,还没有解决方案 - 我将如何开始扩展{{ url() }}
功能,以便我可以像path
和url
一样使用它。
答案 0 :(得分:24)
您可以通过以下方式链接的问题帮助完成
{{ 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')
OR
{{ asset('path/of/file', 'cdn2')
答案 1 :(得分:6)
我不知道CDN的内容,但就扩展url功能而言,请看一下:
的Symfony \桥\枝条\扩展\ 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。