使用 Symfony Asset 组件管理你的 CSS Javascript 和图片文件
之所以想介绍 Symfony Asset 组件,是因为我估计这个组件是 Symfony 组件包里可能最容易被轻视的组件之一了。我之前就从来没有正眼看过相关的文档,也从来没用过相关功能,直到最近公司网站要做 CDN 加速的时候,才想起来有这么一个东西。
可能很多学习 Symfony 的同学或多或少都在 Symfony 官方最佳实践教程里看到过 asset这个 twig 函数,但文档并没有解释 asset是做什么的,能带来什么样的好处。我最近仔细阅读了 Asset 组件的文档,并做了相关实践,把一些有用的信息分享一下。
Asset 是什么东东?
其实就是 css / javascript / 图片 这类静态文件的统称啦。
Asset 管理维护会遇到的常见问题
过去静态文件的路径都是写死在模板文件里的,比如官网提供的例子:
<linkrel="stylesheet" type="text/css" href="/css/main.css"> <!-- ... --> <ahref="/"><img src="/static/imghw/default1.png" data-src="/images/logo.png" class="lazy" alt="使用 Symfony Asset 组件管理你的 CSS Javascript 和图片文件" ></a>
除非真的是一个相当相当简单的项目你可以这么写,你最好不要把这些路径写死,因为你会给你自己挖以下几个坑儿:
- 你要不断得在每一个引用静态文件的地方写全路径。
- 版本管理麻烦。你可能想要缓存你的静态文件,而缓存静态文件需要通过在 URL 地址后面添加版本号(一般来说类似于 /main.css?v=1的方式)来控制缓存是否要更新,但如果你的路径都是在各个文件里写死的……那你就一个一个慢慢改吧,还容易漏。
- 项目刚开始静态文件路径写死一时爽,万一静态文件目录的路径变了你就傻叉了,又一个一个慢慢改吧。
- 有一种技术叫做多 CDN,用来减轻单 CDN 的压力。假如文件 main.css做了两个 CDN http://cdn1.com/main.css和 http://cdn2.com/main.css,如果路径是写死的,你如何做到让页面随机返回这两个 CDN 地址中的其中一个?
那 Symfony Asset 组件能干啥?
正好对应于上面的几个问题:
- 有了它,你不用再把路径写全了,而是可以把公用的目录部分省略掉
- 有了它,指定静态文件版本方便了,就一个配置的事儿!
- 有了它,移动静态文件的位置方便了,换目录换域名换 CDN,随便换!
- 有了它,实现多 CDN 不是梦!
今天我先写到这儿吧。如果大家是从非我个人网站(http://chrisyue.com)看到的转载,请点原文看看后续有没有完成。
Symfony Asset 组件这么棒,怎么用呢?
我用的是 Symfony 框架,那在框架里该如何使用 Symfony Asset 组件呢?
弱弱的多问一句:Symfony Assetic 组件又是什么鬼,跟 Asset 组件有什么关系吗?

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸
