Symfony Twig:为什么要使用asset方法?

11

Symfony 建议将资源放在 web 文件夹中

他们还谈到了使用 asset 方法。为什么需要 asset 方法?它需要更多的字符,而不是直接放链接。

为什么会这样:

<img src="{{ asset('img/social/facebook.png') }}" />

比这更好:
<img src="/img/social/facebook.png" />

我觉得我一定是错过了一些原因。


2
我建议你阅读这篇博客文章。使用资产支持路径快捷方式以避免您所描述的问题,但它最强有力的论据(在我看来)是您可以非常轻松地将资产移动到不同的存储位置,例如CDN。 - JimL
1
你正在展示的是无用的。更有用的是,如果你有一个配置好的文件系统用于 /img/social,这样你就可以执行 asset('facebook.png', 'assets'),然后重新定义 assets 文件系统指向 CDN,这样你就不必搜索/替换等操作了。 :) - Jared Farrish
谢谢@JaredFarrish。我知道我漏了什么。 - Eric
这是一种工具,直到你需要它才知道它的用途。即使像问题中使用“完整”的路径,使用 asset() 在我描述的那些情况下仍然很方便,因为它会为您修复 URL(即使它“看起来”只是更多的输入)。话虽如此,除非你有资产狂热症,否则只需使用本地目录的路径。当你需要 asset() 时,你就会得到它。重构然后更新你的路径。 - Jared Farrish
2个回答

20
你的主目录是 \web
在你的 config.yml 中 (使用 Symfony 5 和更高版本的 config/packages/framework.yaml):
assets:
    packages:
        downloads:
            base_path: images/yesterday/answers/download/
        attachment:
            base_path: stack/post/answers/ 

在这种情况下,downloadsattachment是你的'sections'
而不是编写以下代码:
<img src="images/yesterday/answers/download/facebook.png" />
<img src="stack/post/answers/photo.jpeg" />

您可以使用:

<img src="{{ asset(facebook.png, 'downloads') }}" />
<img src="{{ asset(photo.jpeg, 'attachment') }}" />

因为您在视图中没有长路径,而且您将项目更好地组织为各个部分分类。
更多信息请看这里:http://symfony.com/doc/current/reference/configuration/framework.html#assets

我们有一个类似的配置,只是它根据键选择关联的Flysystem文件系统路径。 - Jared Farrish

4
因为Twig标签asset在后台运行PHP代码,它可以修改输出结果。例如,我有一个系统在运行,原始文件位于web/assets/js/目录(以及img/或css/),根据内容进行重命名 - 这意味着当Web服务器提供这些文件时,它们可以被标记为“永久缓存此文件”,因此希望网站读者不必再次下载相同的文件,因为他们已经下载过该文件。
在这种情况下,asset标签被给予原始文件名,但只是用作索引到唯一重命名文件的查找项 - 这个文件将永远不需要更改,因此可以标记为可缓存多年。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接