ivoba/twig-asset-version-extension

v1.0.0 2014-12-17 11:11 UTC

This package is auto-updated.

Last update: 2024-09-10 21:05:40 UTC


README

在 Twig 中渲染带有版本号的资产文件名。

Build Status

安装

使用 composer

require ivoba/twig-asset-version-extension

使用方法

在你的 twig 文件中

<script src="{{ asset_versioned('/dist/js/script.js') }}"></script>

这将渲染: /dist/js/script.12345.js

其中 12345 默认是文件的 md5 内容摘要。

技巧是保留文件的原名: /dist/js/script.js
并让 web 服务器通过模式重写 URL。

例如,对于上面的模式和使用 Apache mod_rewrite,你可以使用

RewriteRule ^dist/(.+)\.(.+)\.(js|css|png|jpg|gif)$ /dist/$1.$3 [L]

对于 nginx

location ~* ^.+\.(dist)$ {
        rewrite ^(.+)\.(\d+)\.(dist)$ $1.$3 last;
        expires 31536000s;

集成

Silex

注册 Twig 扩展

$app['twig'] = $app->share($app->extend('twig', function ($twig, $app) {
    $twig->addExtension(new \Ivoba\AssetVersion\Twig\AssetVersionExtension(new \Ivoba\AssetVersion\Version\Md5ContentAssetVersion(),
                                                                           new \Ivoba\AssetVersion\Namer\DefaultNamer(),
                                                                            __DIR__. '/../web'));
    return $twig;
}));

Symfony

在你的 services.xml 中添加以下内容

<service id="ivoba_asset_version.version.md5_content"
         class="Ivoba\AssetVersion\Version\Md5ContentAssetVersion">
</service>
<service id="ivoba_asset_version.namer.default"
         class="Ivoba\AssetVersion\Namer\DefaultNamer">
</service>
<service id="ivoba_asset_version.twig.asset_version_extension"
         class="Ivoba\AssetVersion\Twig\AssetVersionExtension">
    <argument type="service" id="ivoba_asset_version.version.md5_content"/>
    <argument type="service" id="ivoba_asset_version.namer.default"/>
    <argument>%asset_dir%</argument>
    <tag name="twig.extension"/>
</service>

扩展

你可以通过实现相应的接口创建自己的 Version 或 Namer 类,并将它们传递给扩展。
例如,如果你更喜欢使用时间戳作为版本或不同的文件名模式。

在扩展中,你可以将选项作为第四个参数添加,目前它只提供了 options['asset.directory'] 选项,作为资产的默认目录。

致谢

了解更多关于这个想法的资料

http://www.particletree.com/notebook/automatically-version-your-css-and-javascript-files/

http://www.bephpug.de/folien/asset_fingerprinting_with_php_demo_2012-08-07.pdf