【问题标题】:Symfony2 / Twig : Generate Alternate Absolute URL Path for use with CDN?Symfony2 / Twig:生成用于 CDN 的备用绝对 URL 路径?
【发布时间】:2012-04-02 16:39:17
【问题描述】:

这个stackoverflow solution 几乎回答了我的问题。但我想在Twig 中生成 CDN 网址,而不仅仅是资源。我想为动态内容生成它们。所以我不认为 Assetic 调整是合适的领域。

现在,我可以在parameters.ini 中设置 CDN_url 并在我的网址中使用它。我的代码看起来像这样:{{CDN_Url}}{{url('route',{'param1':'value'}} .. 代码维护是我不喜欢这个选项的一个主要原因。然后你可以做一些事情,比如检查/cdn/ 的路由以生成 CDN url 和其他一切都基于域。我不必跑来跑去改变很多变量。如果我想停止生成 CDN url。我只能修改路线。因此,弄清楚是否有一个干净的解决方案有很多好处。

如果还没有解决方案 - 我将如何开始扩展 {{ url() }} 功能,以便我可以像 pathurl 一样使用它。

【问题讨论】:

  • 您是否有基于 symfony2 构建的多域站点或在 CDN 上具有由 symfony 路由定义的动态 url 的内容?
  • CDN 的工作方式就像拥有一个多域。 cdn.domain.com/route 镜像 my.domain.com/route .. 使用 Pull Origin。所以有时候,加载 my.domain 是有充分理由的,而在其他时候,比如媒体,加载 cdn.domain 是有意义的。

标签: php symfony cdn twig


【解决方案1】:

我不知道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。

【讨论】:

    【解决方案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"]
    

    然后在你的树枝模板文件中

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

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

    【讨论】:

    • 开箱即用。 @Cerad 的解决方案非常适合让您开始制作更简洁的功能。
    • 在 Symfony 3.0 中,'packages' 应该嵌套在 framework: -> assets: 下。
    猜你喜欢
    • 2011-11-29
    • 2014-05-24
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多