为Symfony2和Twig中的文件添加前缀资源路径

时间:2014-01-01 23:19:54

标签: php symfony twig assets

我将文件上传到web/files/images/,我正在尝试使用asset函数链接它们:

<img src='{{ asset(article.image) }}'/>

但这会产生/img1.jpg之类的网址 我需要添加前缀(设置基本文件夹)资产URL以强制它/files/images/img1.jpg 我如何在asset网址前加上?

3 个答案:

答案 0 :(得分:10)

虽然您可以轻松地为此目的引入新的树枝变量(即在基础模板中)......

{% set asset_base = '//files/images' %}

...或创建静态全局树枝变量...

# app/config/config.yml
twig:
    globals:
        asset_base: //files/images

...然后在内部使用它,即src标记的img属性...

<img src='{{ asset_base }}{{ asset(article.image) }}'/>

... symfony2已经以assets_base_urls指令的形式提供此功能

# app/config/config.yml
framework:
    templating:
        assets_base_urls:
            http:   [http://domain/files/images]
            ssl:    [https://domain/files/images]

您还可以通过提供协议相对网址来设置基本网址:

framework:
    templating:
        assets_base_urls: //files/images

有关该指令的更多信息,请参阅文档章节 FrameworkBundle Configuration#assets-base-urls

答案 1 :(得分:3)

请注意,自symfony 2.7起,来自@nifr的 assets_base_urls 解决方案仅适用于有效的网址,而不适用于相关的网址。

请参阅此处https://github.com/symfony/symfony/issues/14332

&gt;的解决方案2.7是使用相对基本路径的新资产组件作为前缀。

framework:
    assets:
        base_path: 'assets'

答案 2 :(得分:2)

如果您不想为所有资产添加前缀,资产助手会提供另一种使用包执行此操作的非常好的方法。

包具有名称,可以具有其他设置,例如版本和基本路径。您可以在配置中配置程序包,并可以在资产功能的第二个参数中设置要使用的程序包的名称。

在你的情况下:

framework:
    templating:
        packages:
            images:
                base_url: /web/files/images # can also be scheme specific

然后在你的模板中:

<img src="{{ asset('...', 'images'). }}">

更多信息:http://symfony.com/doc/current/components/templating/helpers/assetshelper.html#multiple-packages