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结合了两个主要思想:assetsfiltersassets 是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实现资源管理的更多相关文章

  1. PHP资源列表

    一个PHP资源列表,内容包括:库.框架.模板.安全.代码分析.日志.第三方库.配置工具.Web 工具.书籍.电子书.经典博文等等. 初始翻译信息来自:<推荐!国外程序员整理的 PHP 资源大全& ...

  2. 【PHP资源】PHP 资源大全

    看到这篇文章不错,转来收藏 依赖管理 依赖和包管理库 Composer/Packagist:一个包和依赖管理器 Composer Installers:一个多框架Composer库安装器 Pickle ...

  3. Github上的PHP资源汇总大全

    依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers:  一个多框架Composer库安装器 Pickle: 可以 ...

  4. 【PHP开发】国外程序员收集整理的 PHP 资源大全

    依赖管理 依赖和包管理库 Composer/Packagist:一个包和依赖管理器 Composer Installers:一个多框架Composer库安装器 Pickle:一个PHP扩展安装器 其他 ...

  5. 推荐!国外程序员整理的 PHP 资源大全

    推荐!国外程序员整理的 PHP 资源大全 2014/08/02 · PHP, 工具与资源 · 8.5K 阅读 · 1 评论· php 分享到:0 与<YII框架>不得不说的故事—安全篇 R ...

  6. Github上PHP资源汇总大全,php学习的好资料

    Github上PHP资源汇总大全,php学习的好资料 国外程序员ziadoz 在Github上收集整理了PHP的各种资源,内容包括模板.框架.数据库.安全等方面的库和工具.汇总了各种PHP资源,供各位 ...

  7. [转]PHP资源列表

    转自:http://www.cnblogs.com/CraryPrimitiveMan/p/4437272.html 一个PHP资源列表,内容包括:库.框架.模板.安全.代码分析.日志.第三方库.配置 ...

  8. PHP资源列表(转)

    一个PHP资源列表,内容包括:库.框架.模板.安全.代码分析.日志.第三方库.配置工具.Web 工具.书籍.电子书.经典博文等等. 初始翻译信息来自:<推荐!国外程序员整理的 PHP 资源大全& ...

  9. Github上的PHP开源资源汇总

    依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers:  一个多框架Composer库安装器 Pickle: 可以 ...

随机推荐

  1. 《SPA设计与架构》之MV*框架

    原文 简书原文:https://www.jianshu.com/p/39f8f0aefdc2 大纲 1.认识MV*框架 2.传统UI设计模式 3.对框架的本质认识——框架有效性和框架分类 4.MV*基 ...

  2. 数据类型总结——Number(数值类型)

    相关文章 简书原文:https://www.jianshu.com/p/9fb573ef10da 数据类型总结——概述:https://www.cnblogs.com/shcrk/p/9266015. ...

  3. Maven实战——有用Nexus创建私服(下)

    使用Maven部署构件至Nexus 日常开发生成的快照版本号构件能够直接部署到Nexus中策略为Snapshot的宿主仓库中.项目正式公布的构建部署到Nexus中策略为Release的宿主仓库中.PO ...

  4. Android自定义组件系列【5】——进阶实践(1)

    接下来几篇文章将对任老师的博文<可下拉的PinnedHeaderExpandableListView的实现>分步骤来详细实现,来学习一下大神的代码并记录一下. 原文出处:http://bl ...

  5. springMVC注解@initbinder

    在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支持这个格式的转换,所以必须要手动配置, 自定义数据类型的绑定才能实现这个功能. 比 ...

  6. [Docker] Build Your Own Custom Docker Image

    In this lesson we will cover how to build your own custom Docker image from scratch. We'll walk thro ...

  7. SqlBulkCopy 帮助类

    using System;using System.Collections.Generic;using System.Configuration;using System.Data;using Sys ...

  8. amazeui-js插件-ui增强-日期组件如何使用(把实例做一下)

    amazeui-js插件-ui增强-日期组件如何使用(把实例做一下) 一.总结 一句话总结:需要jquery.js和amazeui.js一切才能使用 1.amazeui中的各种js效果要怎么才能使用? ...

  9. [GeekBand] C++ 基础知识一 ——通过引用传递数组

    本文参考 : C++ Primer (第四版)  7.2.4及 16.1.5 相关章节 GeekBand 侯捷老师,学习笔记 开发环境采用:VS2013版本 关键问题一.传递引用与传指针.传值的区别? ...

  10. PHP/HTML混写的四种方式总结

    PHP/HTML混写的四种方式总结 一.总结 一句话总结: 注意点: 1.双引号里面解析变量:echo "$Content" 2.HEREDOC和NOWDOC的关系:类似于双引号包 ...