ivoba / twig-asset-version-extension
v1.0.0
2014-12-17 11:11 UTC
Requires
- php: >=5.4
- twig/extensions: ~1.0
Requires (Dev)
- ivoba/stop: ~0.2
- phpunit/phpunit: ~3.7
This package is auto-updated.
Last update: 2024-09-10 21:05:40 UTC
README
在 Twig 中渲染带有版本号的资产文件名。
安装
使用 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