Symfony——如何使用Assetic实现资源管理
1. 安装和启用
从Symfony 2.8开始,Assetic不再包含在Symfony Standard Edition中。在使用其任何功能之前,请在您的项目中安装执行此控制台命令的 AsseticBundle:
$ composer require symfony/assetic-bundle
然后,在Symfony应用程序的 AppKernel.php 文件中启用该bundle:
// app/AppKernel.php // ...
class AppKernel extends Kernel
{
// ... public function registerBundles()
{
$bundles = array(
// ...
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
); // ...
}
}
最后,添加以下配置以在应用程序中启用Assetic支持:
# app/config/config.yml
assetic:
debug: '%kernel.debug%'
use_controller: '%kernel.debug%'
filters:
cssrewrite: ~ # ...
2. Assetic简介
Assetic结合了两个主要思想:assets 和 filters 。assets 是CSS,JavaScript和图像文件等文件。filters 可以在将它们提供给浏览器之前应用于这些文件。如此实现了存储在应用程序中的资源文件与实际呈现给用户的文件之间的分离。
没有Assetic,您只能直接提供存储在应用程序中的文件:
<script src="{{ asset('js/script.js') }}"></script>
但是,通过Assetic,您可以在服务之前操纵这些资源(或从任何地方加载它们)。这意味着你可以:
- 压缩并整合所有的CSS和JS文件
- 通过某种编译器(如LESS,SASS或CoffeeScript)运行所有(或部分)CSS或JS文件
- 进行图像优化
3. 使用
比起直接提供文件,使用Assetic有许多好处,这些文件不需要必须存储在被使用的地方,而是可以从各种来源(例如从一个包中)中获取。
您可以使用Assetic使用CSS,JavaScript和图像。添加之后的逻辑处理基本上是一样的,但语法略有不同。
3.1 包含JS文件
{% javascripts '@AppBundle/Resources/public/js/*' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
如果您的应用程序模板使用Symfony标准版的默认块名称,那么javascripts标签最常见于javascripts块中:
{# ... #}
{% block javascripts %}
{% javascripts '@AppBundle/Resources/public/js/*' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
{# ... #}
在此示例中,AppBundle的 Resources/public/js/ 目录中的所有文件将从不同的位置加载和提供。实际渲染的标签可能简单如下:
<script src="/app_dev.php/js/abcd123.js"></script>
注意:一旦使用Assetic处理资源,文件将从不同的位置提供。这将导致通过CSS文件的相对路径引用图像的的问题。请参阅使用cssrewrite过滤器修复CSS路径。
3.2 包含css文件
要引入CSS样式表,您可以使用与上述相同的技术,但使用stylesheets标签除外:
{% stylesheets 'bundles/app/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
但是,由于Assetic更改了资源的路径,所以这将破坏使用相对路径(或其他路径)的背景图像,除非您使用cssrewrite filters。
注意,在包含JavaScript文件的示例中,您使用路径(如 @ AppBundle / Resources / public / file.js )引用了这些文件,但是在本示例中,您使用其绝对的、可公开访问的路径引用了CSS文件: bundles/app/css 。除了已知的使用CSS样式表的 @AppBundle 语法导致导致cssrewrite filters失败的问题之外,您可以随意使用这两种语法。
3.3 包含image
要包含image,可以使用 image 标签:
{% image '@AppBundle/Resources/public/images/example.jpg' %}
<img src="{{ asset_url }}" alt="Example" />
{% endimage %}
您也可以使用Assetic进行图像优化。更多信息请参考如何使用Assetic与Twig函数进行图像优化。
除了使用Assetic来包含图像,您可以考虑使用 LiipImagineBundle 公用bundle,它可以在服务之前压缩和处理图像(旋转,调整大小,水印等)。
Symfony——如何使用Assetic实现资源管理的更多相关文章
- PHP资源列表
一个PHP资源列表,内容包括:库.框架.模板.安全.代码分析.日志.第三方库.配置工具.Web 工具.书籍.电子书.经典博文等等. 初始翻译信息来自:<推荐!国外程序员整理的 PHP 资源大全& ...
- 【PHP资源】PHP 资源大全
看到这篇文章不错,转来收藏 依赖管理 依赖和包管理库 Composer/Packagist:一个包和依赖管理器 Composer Installers:一个多框架Composer库安装器 Pickle ...
- Github上的PHP资源汇总大全
依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers: 一个多框架Composer库安装器 Pickle: 可以 ...
- 【PHP开发】国外程序员收集整理的 PHP 资源大全
依赖管理 依赖和包管理库 Composer/Packagist:一个包和依赖管理器 Composer Installers:一个多框架Composer库安装器 Pickle:一个PHP扩展安装器 其他 ...
- 推荐!国外程序员整理的 PHP 资源大全
推荐!国外程序员整理的 PHP 资源大全 2014/08/02 · PHP, 工具与资源 · 8.5K 阅读 · 1 评论· php 分享到:0 与<YII框架>不得不说的故事—安全篇 R ...
- Github上PHP资源汇总大全,php学习的好资料
Github上PHP资源汇总大全,php学习的好资料 国外程序员ziadoz 在Github上收集整理了PHP的各种资源,内容包括模板.框架.数据库.安全等方面的库和工具.汇总了各种PHP资源,供各位 ...
- [转]PHP资源列表
转自:http://www.cnblogs.com/CraryPrimitiveMan/p/4437272.html 一个PHP资源列表,内容包括:库.框架.模板.安全.代码分析.日志.第三方库.配置 ...
- PHP资源列表(转)
一个PHP资源列表,内容包括:库.框架.模板.安全.代码分析.日志.第三方库.配置工具.Web 工具.书籍.电子书.经典博文等等. 初始翻译信息来自:<推荐!国外程序员整理的 PHP 资源大全& ...
- Github上的PHP开源资源汇总
依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers: 一个多框架Composer库安装器 Pickle: 可以 ...
随机推荐
- C++设计模式实现--备忘录(Memento)模式
一. 备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态.并在该对象之外保存这个状态. 这样以后就可将该对象恢复到原先保存的状态. 结构图: 使用范围: Memento 模式比較适用于功 ...
- 【苦读官方文档】2.Android应用程序基本原理概述
官方文档原文地址 应用程序原理 Android应用程序是通过Java编程语言来写.Android软件开发工具把你的代码和其它数据.资源文件一起编译.打包成一个APK文件,这个文档以.apk为后缀,保存 ...
- 想要搞BGM,没有歌曲链接怎么办?
有对于想要做个个人网站BGM,而非商业用途和非法用途,这只是个小技巧,仅限于个人娱乐使用. 方法一: 首先打开酷狗网页端 搜索想要的音乐名字 进入播放页面 进入开发者模式(右键鼠标->检查或者直 ...
- Android 利用线程运行栈StackTraceElement设计Android日志模块
如果你想在你的Android程序中自动打印MainActivity.onCreate(line:37)这种类名.方法名(行数)的日志该如何实现呢? 1.引入Java的线程运行栈 Java.lang包中 ...
- thinkphp3.1 发送email
//*********************发送邮件************************** Vendor('email'); //******************** 配置信息 * ...
- 【t053】整数去位
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对 ...
- RabbitMQ 服务
RabbitMQ 使用场景一 安装环境 1.下载安装 Erlang 运行时环境 2.下载安装 RabbitMQ Server 应用程序 3.启动 RabbitMQ 服务(默认启动) 4.安装管理平 ...
- springMVC返回json数据乱码问题及@RequestMapping 详解
原文地址:https://blog.csdn.net/u010127245/article/details/51774074 一.@RequestMapping RequestMapping是一个用来 ...
- [Ramda] Change Object Properties with Ramda Lenses
In this lesson we'll learn the basics of using lenses in Ramda and see how they enable you to focus ...
- 76个值得你注意的erlang编程习惯
http://www.tuicool.com/articles/ZNzuyu 前言 学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天抽时间整理出来了一部分 ...