资产组件

编辑该页面

警告:你浏览的文档欧宝体育电话<一个href="//www.oldmanjams.com/releases/3.2">欧宝娱乐app下载地址Symfony 3.2,不再维护。

读<一个href="//www.oldmanjams.com/doc/current/components/asset.html">这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

资产组件< /h1>

资产组件管理URL生成和版本化的网络资产,比如CSS样式表、JavaScript文件和图像文件。

在过去,这是常见的web应用程序中硬编码的url的网络资产。例如:

1 2 3 4 5
<链接rel=“样式表”类型=“文本/ css”href=“/ css / main.css”>< !——……- - ><一个href=“/”><imgsrc=“/图片/ logo.png”>< /一个>

这种做法不再推荐,除非web应用程序非常简单。硬编码的url可以是一个劣势,因为:

  • 模板得到详细的:你有写每个资产的完整路径。在使用资产组件时,您可以组织资产包,以避免重复共同路径的一部分;
  • 版本控制是很困难的:它必须要定制为每个应用程序管理。(如添加一个版本。main.css ? v = 5)资产url是必不可少的对于某些应用程序,因为它允许您控制资产如何缓存。资产组件允许您定义为每个包不同的版本管理策略;
  • 移动资产位置非常繁琐和容易出错的,这需要你仔细更新所有资产纳入所有的url模板。资产组件允许毫不费力地将资产仅仅通过改变基本路径与包相关的资产价值;
  • 几乎是不可能使用多个发布商:这种技术需要你改变资产随机为每个请求的URL。资产组件提供了开箱即用的支持任意数量的多个发布商,定期(http://)和安全(https://)。

使用< /h2>

版本化的资产< /h3>

资产组件的主要功能之一是能够管理应用程序的版本控制的资产。资产版本通常用来控制这些资产是如何缓存。

而不是依靠一个简单的版本机制,资产组件允许您定义高级版本化策略通过PHP类。两个内置策略<一个href="https://github.com/symfony/symfony/blob/3.2/src/Symfony/Component/Asset/VersionStrategy/EmptyVersionStrategy.php" class="reference external" title="EmptyVersionStrategy" rel="external noopener noreferrer" target="_blank">EmptyVersionStrategy,不添加任何资产和版本<一个href="https://github.com/symfony/symfony/blob/3.2/src/Symfony/Component/Asset/VersionStrategy/StaticVersionStrategy.php" class="reference external" title="StaticVersionStrategy" rel="external noopener noreferrer" target="_blank">StaticVersionStrategy,它允许您设置版本格式字符串。

在这个例子中,StaticVersionStrategy用于添加v1任何资产路径后缀:

1 2 3 4 5 6 7
使用欧宝娱乐app下载地址\组件\资产\;使用欧宝娱乐app下载地址\组件\资产\VersionStrategy\StaticVersionStrategy;美元=包(StaticVersionStrategy (“v1”));回声美元- >getUrl (' / image.png ');/ /结果:/ image.png ? v1

如果您想修改的版本格式,通过sprintf-compatible格式字符串的第二个参数StaticVersionStrategy构造函数:

1 2 3 4 5 6 7 8 9 10 11
/ /把“版本”字之前版本的值美元=包(StaticVersionStrategy (“v1”,= % s ' ' % s ?版本));回声美元- >getUrl (' / image.png ');/ /结果:/ image.png ? version = v1/ /把资产版本之前美元=包(StaticVersionStrategy (“v1”,' % 2 $ s / % 1 $ s '));回声美元- >getUrl (' / image.png ');/ /结果:/ v1 / image.png

分组的资产< /h3>

通常,许多生活在一个共同的路径(如资产。/静态图像)。如果这是你的情况下,替换默认<一个href="https://github.com/symfony/symfony/blob/3.2/src/Symfony/Component/Asset/Package.php" class="reference external" title="包" rel="external noopener noreferrer" target="_blank">包类<一个href="https://github.com/symfony/symfony/blob/3.2/src/Symfony/Component/Asset/PathPackage.php" class="reference external" title="PathPackage" rel="external noopener noreferrer" target="_blank">PathPackage为了避免重复一遍又一遍地路径:

1 2 3 4 5 6 7
使用欧宝娱乐app下载地址\组件\资产\PathPackage;/ /……美元=PathPackage (/静态图像的,StaticVersionStrategy (“v1”));回声美元- >getUrl (' / logo.png ');/ /结果:/静态/图片/ logo.png ? v1

绝对的资产和发布商< /h3>

主机应用程序资产在不同的领域和发布商(内容分发网络)应该使用<一个href="https://github.com/symfony/symfony/blob/3.2/src/Symfony/Component/Asset/UrlPackage.php" class="reference external" title="UrlPackage" rel="external noopener noreferrer" target="_blank">UrlPackage资产阶级产生绝对url:

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址\组件\资产\UrlPackage;/ /……美元=UrlPackage (“http://static.example.com/images/”,StaticVersionStrategy (“v1”));回声美元- >getUrl (' / logo.png ');/ /结果:http://static.example.com/images/logo.png?v1

你也可以通过schema-agnostic URL:

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址\组件\资产\UrlPackage;/ /……美元=UrlPackage (' / /static.example.com/images/',StaticVersionStrategy (“v1”));回声美元- >getUrl (' / logo.png ');/ /结果:/ /static.example.com/images/logo.png?v1

这是非常有用的,因为资产将自动通过HTTPS请求如果访客浏览你的网站在HTTPS。只是确保你CDN主机支持https。

如果你从多个领域服务资产改善应用程序的性能,通过一个url数组的第一个参数UrlPackage构造函数:

1 2 3 4 5 6 7 8 9 10 11 12 13
使用欧宝娱乐app下载地址\组件\资产\UrlPackage;/ /……美元url=数组(' / /static1.example.com/images/',' / /static2.example.com/images/',);美元=UrlPackage (美元url,StaticVersionStrategy (“v1”));回声美元- >getUrl (' / logo.png ');/ /结果:http://static1.example.com/images/logo.png?v1回声美元- >getUrl (' /程序');/ /结果:http://static2.example.com/images/icon.png?v1

对于每一个资产,所使用的url将随机之一。但是,选择是确定的,这意味着每个资产将总是服务于相同的域。这种行为简化了HTTP缓存的管理。

叫包< /h3>

应用程序管理许多不同的资产可能需要将它们分组包的版本控制策略和基本路径。资产组件包括一个<一个href="https://github.com/symfony/symfony/blob/3.2/src/Symfony/Component/Asset/Packages.php" class="reference external" title="包" rel="external noopener noreferrer" target="_blank">包几个包的类来简化管理。

在下面的示例中,使用相同的所有包版本控制策略,但是他们都有不同的基本路径:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址\组件\资产\;使用欧宝娱乐app下载地址\组件\资产\PathPackage;使用欧宝娱乐app下载地址\组件\资产\UrlPackage;使用欧宝娱乐app下载地址\组件\资产\;/ /……美元versionStrategy=StaticVersionStrategy (“v1”);美元defaultPackage=包(美元versionStrategy);美元namedPackages=数组(“img”= >UrlPackage (“http://img.example.com/”,美元versionStrategy),“医生”= >PathPackage (/ /深度/地方/文档的,美元versionStrategy),);美元=包(美元defaultPackage,美元namedPackages)

类允许定义一个默认的包,它将被应用到资产不定义包的名称使用。此外,这个应用程序定义了一个包img从外部域和一个图像医生包装时避免重复长路径链接到一个文档里面一个模板:

1 2 3 4 5 6 7 8
回声美元- >getUrl (' / main.css ');/ /结果:/ main.css ? v1回声美元- >getUrl (' / logo.png ',“img”);/ /结果:http://img.example.com/logo.png?v1回声美元- >getUrl (' / resume.pdf ',“医生”);/ /结果:/ /深度/地方/文件/ resume.pdf ? v1

这项工作,包括代码示例,许可下<一个rel="license" href="https://creativecommons.org/licenses/by-sa/3.0/">Creative Commons冲锋队3.0许可证。